1case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_s64:
2case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_u64:
3case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_f32:
4case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_s32:
5case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_u32: {
6 llvm::Type * Param0;
7 llvm::Type * Param1;
8 switch (BuiltinID) {
9 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_s64:
10 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
11 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
12 break;
13 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_u64:
14 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
15 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
16 break;
17 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_f32:
18 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
19 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
20 break;
21 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_s32:
22 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
23 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
24 break;
25 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_u32:
26 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
27 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
28 break;
29 }
30 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
31 Value *Val1 = Builder.CreateLoad(Val0);
32 Value *Val2 = EmitScalarExpr(E->getArg(1));
33 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_wb, {Param0, Param1}), {Val1, Val2});
34 Value *Val4 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
35 Builder.CreateStore(Val4, Val0);
36 return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
37}
38case ARM::BI__builtin_arm_mve_vddupq_wb_u16:
39case ARM::BI__builtin_arm_mve_vddupq_wb_u32:
40case ARM::BI__builtin_arm_mve_vddupq_wb_u8:
41case ARM::BI__builtin_arm_mve_vidupq_wb_u16:
42case ARM::BI__builtin_arm_mve_vidupq_wb_u32:
43case ARM::BI__builtin_arm_mve_vidupq_wb_u8: {
44 Intrinsic::ID Param0;
45 llvm::Type * Param1;
46 switch (BuiltinID) {
47 case ARM::BI__builtin_arm_mve_vddupq_wb_u16:
48 Param0 = Intrinsic::arm_mve_vddup;
49 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
50 break;
51 case ARM::BI__builtin_arm_mve_vddupq_wb_u32:
52 Param0 = Intrinsic::arm_mve_vddup;
53 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
54 break;
55 case ARM::BI__builtin_arm_mve_vddupq_wb_u8:
56 Param0 = Intrinsic::arm_mve_vddup;
57 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
58 break;
59 case ARM::BI__builtin_arm_mve_vidupq_wb_u16:
60 Param0 = Intrinsic::arm_mve_vidup;
61 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
62 break;
63 case ARM::BI__builtin_arm_mve_vidupq_wb_u32:
64 Param0 = Intrinsic::arm_mve_vidup;
65 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
66 break;
67 case ARM::BI__builtin_arm_mve_vidupq_wb_u8:
68 Param0 = Intrinsic::arm_mve_vidup;
69 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
70 break;
71 }
72 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
73 Value *Val1 = Builder.CreateLoad(Val0);
74 Value *Val2 = EmitScalarExpr(E->getArg(1));
75 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val1, Val2});
76 Value *Val4 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
77 Builder.CreateStore(Val4, Val0);
78 return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
79}
80case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_s64:
81case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_u64:
82case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_f32:
83case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_s32:
84case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_u32: {
85 llvm::Type * Param0;
86 llvm::Type * Param1;
87 switch (BuiltinID) {
88 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_s64:
89 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
90 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
91 break;
92 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_u64:
93 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
94 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
95 break;
96 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_f32:
97 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
98 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
99 break;
100 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_s32:
101 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
102 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
103 break;
104 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_u32:
105 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
106 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
107 break;
108 }
109 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
110 Value *Val1 = Builder.CreateLoad(Val0);
111 Value *Val2 = EmitScalarExpr(E->getArg(1));
112 Value *Val3 = EmitScalarExpr(E->getArg(2));
113 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_wb, {Param0, Param1}), {Val1, Val2, Val3});
114 return Builder.CreateStore(Val4, Val0);
115}
116case ARM::BI__builtin_arm_mve_vdwdupq_wb_u16:
117case ARM::BI__builtin_arm_mve_vdwdupq_wb_u32:
118case ARM::BI__builtin_arm_mve_vdwdupq_wb_u8:
119case ARM::BI__builtin_arm_mve_viwdupq_wb_u16:
120case ARM::BI__builtin_arm_mve_viwdupq_wb_u32:
121case ARM::BI__builtin_arm_mve_viwdupq_wb_u8: {
122 Intrinsic::ID Param0;
123 llvm::Type * Param1;
124 switch (BuiltinID) {
125 case ARM::BI__builtin_arm_mve_vdwdupq_wb_u16:
126 Param0 = Intrinsic::arm_mve_vdwdup;
127 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
128 break;
129 case ARM::BI__builtin_arm_mve_vdwdupq_wb_u32:
130 Param0 = Intrinsic::arm_mve_vdwdup;
131 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
132 break;
133 case ARM::BI__builtin_arm_mve_vdwdupq_wb_u8:
134 Param0 = Intrinsic::arm_mve_vdwdup;
135 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
136 break;
137 case ARM::BI__builtin_arm_mve_viwdupq_wb_u16:
138 Param0 = Intrinsic::arm_mve_viwdup;
139 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
140 break;
141 case ARM::BI__builtin_arm_mve_viwdupq_wb_u32:
142 Param0 = Intrinsic::arm_mve_viwdup;
143 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
144 break;
145 case ARM::BI__builtin_arm_mve_viwdupq_wb_u8:
146 Param0 = Intrinsic::arm_mve_viwdup;
147 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
148 break;
149 }
150 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
151 Value *Val1 = Builder.CreateLoad(Val0);
152 Value *Val2 = EmitScalarExpr(E->getArg(1));
153 Value *Val3 = EmitScalarExpr(E->getArg(2));
154 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val1, Val2, Val3});
155 Value *Val5 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(1));
156 Builder.CreateStore(Val5, Val0);
157 return Builder.CreateExtractValue(Val4, static_cast<unsigned>(0));
158}
159case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
160case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
161case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
162case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
163case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32: {
164 llvm::Type * Param0;
165 llvm::Type * Param1;
166 switch (BuiltinID) {
167 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_s64:
168 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
169 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
170 break;
171 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_wb_z_u64:
172 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
173 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
174 break;
175 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_f32:
176 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
177 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
178 break;
179 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_s32:
180 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
181 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
182 break;
183 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_wb_z_u32:
184 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
185 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
186 break;
187 }
188 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
189 Value *Val1 = Builder.CreateLoad(Val0);
190 Value *Val2 = EmitScalarExpr(E->getArg(1));
191 Value *Val3 = EmitScalarExpr(E->getArg(2));
192 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
193 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
194 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_wb_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val5});
195 Value *Val7 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(1));
196 Builder.CreateStore(Val7, Val0);
197 return Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
198}
199case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
200case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
201case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
202case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
203case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32: {
204 llvm::Type * Param0;
205 llvm::Type * Param1;
206 switch (BuiltinID) {
207 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_s64:
208 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
209 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
210 break;
211 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_wb_p_u64:
212 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
213 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
214 break;
215 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_f32:
216 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
217 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
218 break;
219 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_s32:
220 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
221 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
222 break;
223 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_wb_p_u32:
224 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
225 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
226 break;
227 }
228 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
229 Value *Val1 = Builder.CreateLoad(Val0);
230 Value *Val2 = EmitScalarExpr(E->getArg(1));
231 Value *Val3 = EmitScalarExpr(E->getArg(2));
232 Value *Val4 = EmitScalarExpr(E->getArg(3));
233 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
234 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
235 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_wb_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
236 return Builder.CreateStore(Val7, Val0);
237}
238case ARM::BI__builtin_arm_mve_vld1q_f16:
239case ARM::BI__builtin_arm_mve_vld1q_s16:
240case ARM::BI__builtin_arm_mve_vld1q_u16:
241case ARM::BI__builtin_arm_mve_vldrhq_f16:
242case ARM::BI__builtin_arm_mve_vldrhq_s16:
243case ARM::BI__builtin_arm_mve_vldrhq_u16: {
244 llvm::Type * Param0;
245 switch (BuiltinID) {
246 case ARM::BI__builtin_arm_mve_vld1q_f16:
247 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
248 break;
249 case ARM::BI__builtin_arm_mve_vld1q_s16:
250 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
251 break;
252 case ARM::BI__builtin_arm_mve_vld1q_u16:
253 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
254 break;
255 case ARM::BI__builtin_arm_mve_vldrhq_f16:
256 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
257 break;
258 case ARM::BI__builtin_arm_mve_vldrhq_s16:
259 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
260 break;
261 case ARM::BI__builtin_arm_mve_vldrhq_u16:
262 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
263 break;
264 }
265 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
266 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), Param0);
267 Address Val2 = Address(Val1, CharUnits::fromQuantity(2));
268 return Builder.CreateLoad(Val2);
269}
270case ARM::BI__builtin_arm_mve_vld1q_f32:
271case ARM::BI__builtin_arm_mve_vld1q_s32:
272case ARM::BI__builtin_arm_mve_vld1q_u32:
273case ARM::BI__builtin_arm_mve_vldrwq_f32:
274case ARM::BI__builtin_arm_mve_vldrwq_s32:
275case ARM::BI__builtin_arm_mve_vldrwq_u32: {
276 llvm::Type * Param0;
277 switch (BuiltinID) {
278 case ARM::BI__builtin_arm_mve_vld1q_f32:
279 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
280 break;
281 case ARM::BI__builtin_arm_mve_vld1q_s32:
282 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
283 break;
284 case ARM::BI__builtin_arm_mve_vld1q_u32:
285 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
286 break;
287 case ARM::BI__builtin_arm_mve_vldrwq_f32:
288 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
289 break;
290 case ARM::BI__builtin_arm_mve_vldrwq_s32:
291 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
292 break;
293 case ARM::BI__builtin_arm_mve_vldrwq_u32:
294 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
295 break;
296 }
297 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
298 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), Param0);
299 Address Val2 = Address(Val1, CharUnits::fromQuantity(4));
300 return Builder.CreateLoad(Val2);
301}
302case ARM::BI__builtin_arm_mve_vld1q_z_f32:
303case ARM::BI__builtin_arm_mve_vldrwq_z_f32: {
304 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
305 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4)));
306 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 4);
307 Value *Val3 = EmitScalarExpr(E->getArg(1));
308 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
309 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
310 llvm::Type *Val6 = llvm::FixedVectorType::get(FloatTy, 4);
311 Value *Val7 = llvm::Constant::getNullValue(Val6);
312 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(FloatTy, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4))}), {Val1, Val2, Val5, Val7});
313}
314case ARM::BI__builtin_arm_mve_vld1q_z_f16:
315case ARM::BI__builtin_arm_mve_vldrhq_z_f16: {
316 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
317 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8)));
318 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 2);
319 Value *Val3 = EmitScalarExpr(E->getArg(1));
320 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
321 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
322 llvm::Type *Val6 = llvm::FixedVectorType::get(HalfTy, 8);
323 Value *Val7 = llvm::Constant::getNullValue(Val6);
324 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(HalfTy, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8))}), {Val1, Val2, Val5, Val7});
325}
326case ARM::BI__builtin_arm_mve_vldrhq_s32:
327case ARM::BI__builtin_arm_mve_vldrhq_u32: {
328 bool Param0;
329 switch (BuiltinID) {
330 case ARM::BI__builtin_arm_mve_vldrhq_s32:
331 Param0 = 0;
332 break;
333 case ARM::BI__builtin_arm_mve_vldrhq_u32:
334 Param0 = 1;
335 break;
336 }
337 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
338 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
339 Address Val2 = Address(Val1, CharUnits::fromQuantity(2));
340 Value *Val3 = Builder.CreateLoad(Val2);
341 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
342 return SignOrZeroExtend(Builder, Val3, Val4, static_cast<bool>(Param0));
343}
344case ARM::BI__builtin_arm_mve_vldrhq_z_s32:
345case ARM::BI__builtin_arm_mve_vldrhq_z_u32: {
346 bool Param0;
347 switch (BuiltinID) {
348 case ARM::BI__builtin_arm_mve_vldrhq_z_s32:
349 Param0 = 0;
350 break;
351 case ARM::BI__builtin_arm_mve_vldrhq_z_u32:
352 Param0 = 1;
353 break;
354 }
355 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
356 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
357 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 2);
358 Value *Val3 = EmitScalarExpr(E->getArg(1));
359 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
360 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
361 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 4);
362 Value *Val7 = llvm::Constant::getNullValue(Val6);
363 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int16Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4))}), {Val1, Val2, Val5, Val7});
364 llvm::Type *Val9 = llvm::FixedVectorType::get(Int32Ty, 4);
365 return SignOrZeroExtend(Builder, Val8, Val9, static_cast<bool>(Param0));
366}
367case ARM::BI__builtin_arm_mve_vld1q_z_s16:
368case ARM::BI__builtin_arm_mve_vld1q_z_u16:
369case ARM::BI__builtin_arm_mve_vldrhq_z_s16:
370case ARM::BI__builtin_arm_mve_vldrhq_z_u16: {
371 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
372 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8)));
373 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 2);
374 Value *Val3 = EmitScalarExpr(E->getArg(1));
375 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
376 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
377 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
378 Value *Val7 = llvm::Constant::getNullValue(Val6);
379 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8))}), {Val1, Val2, Val5, Val7});
380}
381case ARM::BI__builtin_arm_mve_vld1q_z_s32:
382case ARM::BI__builtin_arm_mve_vld1q_z_u32:
383case ARM::BI__builtin_arm_mve_vldrwq_z_s32:
384case ARM::BI__builtin_arm_mve_vldrwq_z_u32: {
385 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
386 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4)));
387 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 4);
388 Value *Val3 = EmitScalarExpr(E->getArg(1));
389 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
390 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
391 llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
392 Value *Val7 = llvm::Constant::getNullValue(Val6);
393 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4))}), {Val1, Val2, Val5, Val7});
394}
395case ARM::BI__builtin_arm_mve_vld1q_s8:
396case ARM::BI__builtin_arm_mve_vld1q_u8:
397case ARM::BI__builtin_arm_mve_vldrbq_s8:
398case ARM::BI__builtin_arm_mve_vldrbq_u8: {
399 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
400 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16)));
401 Address Val2 = Address(Val1, CharUnits::fromQuantity(1));
402 return Builder.CreateLoad(Val2);
403}
404case ARM::BI__builtin_arm_mve_vld1q_z_s8:
405case ARM::BI__builtin_arm_mve_vld1q_z_u8:
406case ARM::BI__builtin_arm_mve_vldrbq_z_s8:
407case ARM::BI__builtin_arm_mve_vldrbq_z_u8: {
408 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
409 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16)));
410 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
411 Value *Val3 = EmitScalarExpr(E->getArg(1));
412 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
413 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val4});
414 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
415 Value *Val7 = llvm::Constant::getNullValue(Val6);
416 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16))}), {Val1, Val2, Val5, Val7});
417}
418case ARM::BI__builtin_arm_mve_vldrbq_s32:
419case ARM::BI__builtin_arm_mve_vldrbq_u32: {
420 bool Param0;
421 switch (BuiltinID) {
422 case ARM::BI__builtin_arm_mve_vldrbq_s32:
423 Param0 = 0;
424 break;
425 case ARM::BI__builtin_arm_mve_vldrbq_u32:
426 Param0 = 1;
427 break;
428 }
429 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
430 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
431 Address Val2 = Address(Val1, CharUnits::fromQuantity(1));
432 Value *Val3 = Builder.CreateLoad(Val2);
433 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
434 return SignOrZeroExtend(Builder, Val3, Val4, static_cast<bool>(Param0));
435}
436case ARM::BI__builtin_arm_mve_vldrbq_z_s32:
437case ARM::BI__builtin_arm_mve_vldrbq_z_u32: {
438 bool Param0;
439 switch (BuiltinID) {
440 case ARM::BI__builtin_arm_mve_vldrbq_z_s32:
441 Param0 = 0;
442 break;
443 case ARM::BI__builtin_arm_mve_vldrbq_z_u32:
444 Param0 = 1;
445 break;
446 }
447 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
448 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
449 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
450 Value *Val3 = EmitScalarExpr(E->getArg(1));
451 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
452 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
453 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 4);
454 Value *Val7 = llvm::Constant::getNullValue(Val6);
455 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int8Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4))}), {Val1, Val2, Val5, Val7});
456 llvm::Type *Val9 = llvm::FixedVectorType::get(Int32Ty, 4);
457 return SignOrZeroExtend(Builder, Val8, Val9, static_cast<bool>(Param0));
458}
459case ARM::BI__builtin_arm_mve_vldrbq_s16:
460case ARM::BI__builtin_arm_mve_vldrbq_u16: {
461 bool Param0;
462 switch (BuiltinID) {
463 case ARM::BI__builtin_arm_mve_vldrbq_s16:
464 Param0 = 0;
465 break;
466 case ARM::BI__builtin_arm_mve_vldrbq_u16:
467 Param0 = 1;
468 break;
469 }
470 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
471 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
472 Address Val2 = Address(Val1, CharUnits::fromQuantity(1));
473 Value *Val3 = Builder.CreateLoad(Val2);
474 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
475 return SignOrZeroExtend(Builder, Val3, Val4, static_cast<bool>(Param0));
476}
477case ARM::BI__builtin_arm_mve_vldrbq_z_s16:
478case ARM::BI__builtin_arm_mve_vldrbq_z_u16: {
479 bool Param0;
480 switch (BuiltinID) {
481 case ARM::BI__builtin_arm_mve_vldrbq_z_s16:
482 Param0 = 0;
483 break;
484 case ARM::BI__builtin_arm_mve_vldrbq_z_u16:
485 Param0 = 1;
486 break;
487 }
488 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
489 Value *Val1 = Builder.CreatePointerCast((Val0.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
490 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
491 Value *Val3 = EmitScalarExpr(E->getArg(1));
492 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
493 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
494 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 8);
495 Value *Val7 = llvm::Constant::getNullValue(Val6);
496 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_load, {llvm::FixedVectorType::get(Int8Ty, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8))}), {Val1, Val2, Val5, Val7});
497 llvm::Type *Val9 = llvm::FixedVectorType::get(Int16Ty, 8);
498 return SignOrZeroExtend(Builder, Val8, Val9, static_cast<bool>(Param0));
499}
500case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s16:
501case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s32:
502case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s8:
503case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u16:
504case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u32:
505case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u8:
506case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_s64:
507case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_u64:
508case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_s64:
509case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_u64:
510case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_f16:
511case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s16:
512case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s32:
513case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u16:
514case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u32:
515case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_f16:
516case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s16:
517case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s32:
518case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u16:
519case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u32:
520case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_f32:
521case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_s32:
522case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_u32:
523case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_f32:
524case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_s32:
525case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_u32: {
526 uint32_t Param0;
527 uint32_t Param1;
528 llvm::Type * Param2;
529 llvm::Type * Param3;
530 llvm::Type * Param4;
531 llvm::Type * Param5;
532 switch (BuiltinID) {
533 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s16:
534 Param0 = 8;
535 Param1 = 0;
536 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
537 Param3 = llvm::PointerType::getUnqual(Int8Ty);
538 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
539 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
540 break;
541 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s32:
542 Param0 = 8;
543 Param1 = 0;
544 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
545 Param3 = llvm::PointerType::getUnqual(Int8Ty);
546 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
547 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
548 break;
549 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_s8:
550 Param0 = 8;
551 Param1 = 0;
552 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
553 Param3 = llvm::PointerType::getUnqual(Int8Ty);
554 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
555 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
556 break;
557 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u16:
558 Param0 = 8;
559 Param1 = 0;
560 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
561 Param3 = llvm::PointerType::getUnqual(Int8Ty);
562 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
563 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
564 break;
565 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u32:
566 Param0 = 8;
567 Param1 = 0;
568 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
569 Param3 = llvm::PointerType::getUnqual(Int8Ty);
570 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
571 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
572 break;
573 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_p_u8:
574 Param0 = 8;
575 Param1 = 0;
576 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
577 Param3 = llvm::PointerType::getUnqual(Int8Ty);
578 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
579 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
580 break;
581 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_s64:
582 Param0 = 64;
583 Param1 = 0;
584 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
585 Param3 = llvm::PointerType::getUnqual(Int64Ty);
586 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
587 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
588 break;
589 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_p_u64:
590 Param0 = 64;
591 Param1 = 0;
592 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
593 Param3 = llvm::PointerType::getUnqual(Int64Ty);
594 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
595 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
596 break;
597 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_s64:
598 Param0 = 64;
599 Param1 = 3;
600 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
601 Param3 = llvm::PointerType::getUnqual(Int64Ty);
602 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
603 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
604 break;
605 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_p_u64:
606 Param0 = 64;
607 Param1 = 3;
608 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
609 Param3 = llvm::PointerType::getUnqual(Int64Ty);
610 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
611 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
612 break;
613 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_f16:
614 Param0 = 16;
615 Param1 = 0;
616 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
617 Param3 = llvm::PointerType::getUnqual(HalfTy);
618 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
619 Param5 = llvm::FixedVectorType::get(HalfTy, 8);
620 break;
621 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s16:
622 Param0 = 16;
623 Param1 = 0;
624 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
625 Param3 = llvm::PointerType::getUnqual(Int16Ty);
626 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
627 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
628 break;
629 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_s32:
630 Param0 = 16;
631 Param1 = 0;
632 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
633 Param3 = llvm::PointerType::getUnqual(Int16Ty);
634 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
635 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
636 break;
637 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u16:
638 Param0 = 16;
639 Param1 = 0;
640 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
641 Param3 = llvm::PointerType::getUnqual(Int16Ty);
642 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
643 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
644 break;
645 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_p_u32:
646 Param0 = 16;
647 Param1 = 0;
648 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
649 Param3 = llvm::PointerType::getUnqual(Int16Ty);
650 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
651 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
652 break;
653 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_f16:
654 Param0 = 16;
655 Param1 = 1;
656 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
657 Param3 = llvm::PointerType::getUnqual(HalfTy);
658 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
659 Param5 = llvm::FixedVectorType::get(HalfTy, 8);
660 break;
661 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s16:
662 Param0 = 16;
663 Param1 = 1;
664 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
665 Param3 = llvm::PointerType::getUnqual(Int16Ty);
666 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
667 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
668 break;
669 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_s32:
670 Param0 = 16;
671 Param1 = 1;
672 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
673 Param3 = llvm::PointerType::getUnqual(Int16Ty);
674 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
675 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
676 break;
677 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u16:
678 Param0 = 16;
679 Param1 = 1;
680 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
681 Param3 = llvm::PointerType::getUnqual(Int16Ty);
682 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
683 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
684 break;
685 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_p_u32:
686 Param0 = 16;
687 Param1 = 1;
688 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
689 Param3 = llvm::PointerType::getUnqual(Int16Ty);
690 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
691 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
692 break;
693 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_f32:
694 Param0 = 32;
695 Param1 = 0;
696 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
697 Param3 = llvm::PointerType::getUnqual(FloatTy);
698 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
699 Param5 = llvm::FixedVectorType::get(FloatTy, 4);
700 break;
701 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_s32:
702 Param0 = 32;
703 Param1 = 0;
704 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
705 Param3 = llvm::PointerType::getUnqual(Int32Ty);
706 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
707 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
708 break;
709 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_p_u32:
710 Param0 = 32;
711 Param1 = 0;
712 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
713 Param3 = llvm::PointerType::getUnqual(Int32Ty);
714 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
715 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
716 break;
717 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_f32:
718 Param0 = 32;
719 Param1 = 2;
720 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
721 Param3 = llvm::PointerType::getUnqual(FloatTy);
722 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
723 Param5 = llvm::FixedVectorType::get(FloatTy, 4);
724 break;
725 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_s32:
726 Param0 = 32;
727 Param1 = 2;
728 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
729 Param3 = llvm::PointerType::getUnqual(Int32Ty);
730 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
731 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
732 break;
733 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_p_u32:
734 Param0 = 32;
735 Param1 = 2;
736 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
737 Param3 = llvm::PointerType::getUnqual(Int32Ty);
738 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
739 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
740 break;
741 }
742 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
743 Value *Val1 = EmitScalarExpr(E->getArg(1));
744 Value *Val2 = EmitScalarExpr(E->getArg(2));
745 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
746 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
747 Value *Val5 = EmitScalarExpr(E->getArg(3));
748 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
749 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val6});
750 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_offset_predicated, {Param3, Param4, Param5, Param2}), {(Val0.getPointer()), Val1, Val2, Val3, Val4, Val7});
751}
752case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s16:
753case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s32:
754case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s8:
755case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u16:
756case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u32:
757case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u8:
758case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_s64:
759case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_u64:
760case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_s64:
761case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_u64:
762case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_f16:
763case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s16:
764case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s32:
765case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u16:
766case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u32:
767case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_f16:
768case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s16:
769case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s32:
770case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u16:
771case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u32:
772case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_f32:
773case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_s32:
774case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_u32:
775case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_f32:
776case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_s32:
777case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_u32: {
778 uint32_t Param0;
779 uint32_t Param1;
780 llvm::Type * Param2;
781 llvm::Type * Param3;
782 llvm::Type * Param4;
783 switch (BuiltinID) {
784 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s16:
785 Param0 = 8;
786 Param1 = 0;
787 Param2 = llvm::PointerType::getUnqual(Int8Ty);
788 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
789 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
790 break;
791 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s32:
792 Param0 = 8;
793 Param1 = 0;
794 Param2 = llvm::PointerType::getUnqual(Int8Ty);
795 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
796 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
797 break;
798 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_s8:
799 Param0 = 8;
800 Param1 = 0;
801 Param2 = llvm::PointerType::getUnqual(Int8Ty);
802 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
803 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
804 break;
805 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u16:
806 Param0 = 8;
807 Param1 = 0;
808 Param2 = llvm::PointerType::getUnqual(Int8Ty);
809 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
810 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
811 break;
812 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u32:
813 Param0 = 8;
814 Param1 = 0;
815 Param2 = llvm::PointerType::getUnqual(Int8Ty);
816 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
817 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
818 break;
819 case ARM::BI__builtin_arm_mve_vstrbq_scatter_offset_u8:
820 Param0 = 8;
821 Param1 = 0;
822 Param2 = llvm::PointerType::getUnqual(Int8Ty);
823 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
824 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
825 break;
826 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_s64:
827 Param0 = 64;
828 Param1 = 0;
829 Param2 = llvm::PointerType::getUnqual(Int64Ty);
830 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
831 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
832 break;
833 case ARM::BI__builtin_arm_mve_vstrdq_scatter_offset_u64:
834 Param0 = 64;
835 Param1 = 0;
836 Param2 = llvm::PointerType::getUnqual(Int64Ty);
837 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
838 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
839 break;
840 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_s64:
841 Param0 = 64;
842 Param1 = 3;
843 Param2 = llvm::PointerType::getUnqual(Int64Ty);
844 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
845 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
846 break;
847 case ARM::BI__builtin_arm_mve_vstrdq_scatter_shifted_offset_u64:
848 Param0 = 64;
849 Param1 = 3;
850 Param2 = llvm::PointerType::getUnqual(Int64Ty);
851 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
852 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
853 break;
854 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_f16:
855 Param0 = 16;
856 Param1 = 0;
857 Param2 = llvm::PointerType::getUnqual(HalfTy);
858 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
859 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
860 break;
861 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s16:
862 Param0 = 16;
863 Param1 = 0;
864 Param2 = llvm::PointerType::getUnqual(Int16Ty);
865 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
866 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
867 break;
868 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_s32:
869 Param0 = 16;
870 Param1 = 0;
871 Param2 = llvm::PointerType::getUnqual(Int16Ty);
872 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
873 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
874 break;
875 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u16:
876 Param0 = 16;
877 Param1 = 0;
878 Param2 = llvm::PointerType::getUnqual(Int16Ty);
879 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
880 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
881 break;
882 case ARM::BI__builtin_arm_mve_vstrhq_scatter_offset_u32:
883 Param0 = 16;
884 Param1 = 0;
885 Param2 = llvm::PointerType::getUnqual(Int16Ty);
886 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
887 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
888 break;
889 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_f16:
890 Param0 = 16;
891 Param1 = 1;
892 Param2 = llvm::PointerType::getUnqual(HalfTy);
893 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
894 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
895 break;
896 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s16:
897 Param0 = 16;
898 Param1 = 1;
899 Param2 = llvm::PointerType::getUnqual(Int16Ty);
900 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
901 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
902 break;
903 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_s32:
904 Param0 = 16;
905 Param1 = 1;
906 Param2 = llvm::PointerType::getUnqual(Int16Ty);
907 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
908 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
909 break;
910 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u16:
911 Param0 = 16;
912 Param1 = 1;
913 Param2 = llvm::PointerType::getUnqual(Int16Ty);
914 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
915 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
916 break;
917 case ARM::BI__builtin_arm_mve_vstrhq_scatter_shifted_offset_u32:
918 Param0 = 16;
919 Param1 = 1;
920 Param2 = llvm::PointerType::getUnqual(Int16Ty);
921 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
922 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
923 break;
924 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_f32:
925 Param0 = 32;
926 Param1 = 0;
927 Param2 = llvm::PointerType::getUnqual(FloatTy);
928 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
929 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
930 break;
931 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_s32:
932 Param0 = 32;
933 Param1 = 0;
934 Param2 = llvm::PointerType::getUnqual(Int32Ty);
935 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
936 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
937 break;
938 case ARM::BI__builtin_arm_mve_vstrwq_scatter_offset_u32:
939 Param0 = 32;
940 Param1 = 0;
941 Param2 = llvm::PointerType::getUnqual(Int32Ty);
942 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
943 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
944 break;
945 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_f32:
946 Param0 = 32;
947 Param1 = 2;
948 Param2 = llvm::PointerType::getUnqual(FloatTy);
949 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
950 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
951 break;
952 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_s32:
953 Param0 = 32;
954 Param1 = 2;
955 Param2 = llvm::PointerType::getUnqual(Int32Ty);
956 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
957 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
958 break;
959 case ARM::BI__builtin_arm_mve_vstrwq_scatter_shifted_offset_u32:
960 Param0 = 32;
961 Param1 = 2;
962 Param2 = llvm::PointerType::getUnqual(Int32Ty);
963 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
964 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
965 break;
966 }
967 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
968 Value *Val1 = EmitScalarExpr(E->getArg(1));
969 Value *Val2 = EmitScalarExpr(E->getArg(2));
970 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
971 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
972 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_offset, {Param2, Param3, Param4}), {(Val0.getPointer()), Val1, Val2, Val3, Val4});
973}
974case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s16:
975case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s32:
976case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s8:
977case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u16:
978case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u32:
979case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u8:
980case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_s64:
981case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_u64:
982case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_s64:
983case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_u64:
984case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_f16:
985case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s16:
986case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s32:
987case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u16:
988case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u32:
989case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_f16:
990case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s16:
991case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s32:
992case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u16:
993case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u32:
994case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_f32:
995case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_s32:
996case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_u32:
997case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_f32:
998case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_s32:
999case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_u32: {
1000 uint32_t Param0;
1001 uint32_t Param1;
1002 uint32_t Param2;
1003 llvm::Type * Param3;
1004 llvm::Type * Param4;
1005 llvm::Type * Param5;
1006 llvm::Type * Param6;
1007 switch (BuiltinID) {
1008 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s16:
1009 Param0 = 8;
1010 Param1 = 0;
1011 Param2 = 0;
1012 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1013 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
1014 Param5 = llvm::PointerType::getUnqual(Int8Ty);
1015 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1016 break;
1017 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s32:
1018 Param0 = 8;
1019 Param1 = 0;
1020 Param2 = 0;
1021 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1022 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1023 Param5 = llvm::PointerType::getUnqual(Int8Ty);
1024 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1025 break;
1026 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_s8:
1027 Param0 = 8;
1028 Param1 = 0;
1029 Param2 = 0;
1030 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1031 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
1032 Param5 = llvm::PointerType::getUnqual(Int8Ty);
1033 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
1034 break;
1035 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u16:
1036 Param0 = 8;
1037 Param1 = 0;
1038 Param2 = 1;
1039 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1040 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
1041 Param5 = llvm::PointerType::getUnqual(Int8Ty);
1042 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1043 break;
1044 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u32:
1045 Param0 = 8;
1046 Param1 = 0;
1047 Param2 = 1;
1048 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1049 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1050 Param5 = llvm::PointerType::getUnqual(Int8Ty);
1051 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1052 break;
1053 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_z_u8:
1054 Param0 = 8;
1055 Param1 = 0;
1056 Param2 = 1;
1057 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1058 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
1059 Param5 = llvm::PointerType::getUnqual(Int8Ty);
1060 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
1061 break;
1062 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_s64:
1063 Param0 = 64;
1064 Param1 = 0;
1065 Param2 = 0;
1066 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1067 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
1068 Param5 = llvm::PointerType::getUnqual(Int64Ty);
1069 Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
1070 break;
1071 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_z_u64:
1072 Param0 = 64;
1073 Param1 = 0;
1074 Param2 = 1;
1075 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1076 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
1077 Param5 = llvm::PointerType::getUnqual(Int64Ty);
1078 Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
1079 break;
1080 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_s64:
1081 Param0 = 64;
1082 Param1 = 3;
1083 Param2 = 0;
1084 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1085 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
1086 Param5 = llvm::PointerType::getUnqual(Int64Ty);
1087 Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
1088 break;
1089 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_z_u64:
1090 Param0 = 64;
1091 Param1 = 3;
1092 Param2 = 1;
1093 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1094 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
1095 Param5 = llvm::PointerType::getUnqual(Int64Ty);
1096 Param6 = llvm::FixedVectorType::get(Int64Ty, 2);
1097 break;
1098 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_f16:
1099 Param0 = 16;
1100 Param1 = 0;
1101 Param2 = 0;
1102 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1103 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
1104 Param5 = llvm::PointerType::getUnqual(HalfTy);
1105 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1106 break;
1107 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s16:
1108 Param0 = 16;
1109 Param1 = 0;
1110 Param2 = 0;
1111 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1112 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
1113 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1114 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1115 break;
1116 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_s32:
1117 Param0 = 16;
1118 Param1 = 0;
1119 Param2 = 0;
1120 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1121 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1122 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1123 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1124 break;
1125 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u16:
1126 Param0 = 16;
1127 Param1 = 0;
1128 Param2 = 1;
1129 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1130 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
1131 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1132 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1133 break;
1134 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_z_u32:
1135 Param0 = 16;
1136 Param1 = 0;
1137 Param2 = 1;
1138 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1139 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1140 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1141 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1142 break;
1143 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_f16:
1144 Param0 = 16;
1145 Param1 = 1;
1146 Param2 = 0;
1147 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1148 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
1149 Param5 = llvm::PointerType::getUnqual(HalfTy);
1150 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1151 break;
1152 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s16:
1153 Param0 = 16;
1154 Param1 = 1;
1155 Param2 = 0;
1156 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1157 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
1158 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1159 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1160 break;
1161 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_s32:
1162 Param0 = 16;
1163 Param1 = 1;
1164 Param2 = 0;
1165 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1166 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1167 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1168 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1169 break;
1170 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u16:
1171 Param0 = 16;
1172 Param1 = 1;
1173 Param2 = 1;
1174 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1175 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
1176 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1177 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
1178 break;
1179 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_z_u32:
1180 Param0 = 16;
1181 Param1 = 1;
1182 Param2 = 1;
1183 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1184 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1185 Param5 = llvm::PointerType::getUnqual(Int16Ty);
1186 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1187 break;
1188 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_f32:
1189 Param0 = 32;
1190 Param1 = 0;
1191 Param2 = 0;
1192 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1193 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
1194 Param5 = llvm::PointerType::getUnqual(FloatTy);
1195 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1196 break;
1197 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_s32:
1198 Param0 = 32;
1199 Param1 = 0;
1200 Param2 = 0;
1201 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1202 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1203 Param5 = llvm::PointerType::getUnqual(Int32Ty);
1204 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1205 break;
1206 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_z_u32:
1207 Param0 = 32;
1208 Param1 = 0;
1209 Param2 = 1;
1210 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1211 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1212 Param5 = llvm::PointerType::getUnqual(Int32Ty);
1213 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1214 break;
1215 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_f32:
1216 Param0 = 32;
1217 Param1 = 2;
1218 Param2 = 0;
1219 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1220 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
1221 Param5 = llvm::PointerType::getUnqual(FloatTy);
1222 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1223 break;
1224 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_s32:
1225 Param0 = 32;
1226 Param1 = 2;
1227 Param2 = 0;
1228 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1229 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1230 Param5 = llvm::PointerType::getUnqual(Int32Ty);
1231 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1232 break;
1233 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_z_u32:
1234 Param0 = 32;
1235 Param1 = 2;
1236 Param2 = 1;
1237 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1238 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
1239 Param5 = llvm::PointerType::getUnqual(Int32Ty);
1240 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
1241 break;
1242 }
1243 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
1244 Value *Val1 = EmitScalarExpr(E->getArg(1));
1245 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
1246 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
1247 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
1248 Value *Val5 = EmitScalarExpr(E->getArg(2));
1249 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
1250 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
1251 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_offset_predicated, {Param4, Param5, Param6, Param3}), {(Val0.getPointer()), Val1, Val2, Val3, Val4, Val7});
1252}
1253case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s16:
1254case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s32:
1255case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s8:
1256case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u16:
1257case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u32:
1258case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u8:
1259case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_s64:
1260case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_u64:
1261case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_s64:
1262case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_u64:
1263case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_f16:
1264case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s16:
1265case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s32:
1266case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u16:
1267case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u32:
1268case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_f16:
1269case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s16:
1270case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s32:
1271case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u16:
1272case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u32:
1273case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_f32:
1274case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_s32:
1275case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_u32:
1276case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_f32:
1277case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_s32:
1278case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_u32: {
1279 uint32_t Param0;
1280 uint32_t Param1;
1281 uint32_t Param2;
1282 llvm::Type * Param3;
1283 llvm::Type * Param4;
1284 llvm::Type * Param5;
1285 switch (BuiltinID) {
1286 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s16:
1287 Param0 = 8;
1288 Param1 = 0;
1289 Param2 = 0;
1290 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
1291 Param4 = llvm::PointerType::getUnqual(Int8Ty);
1292 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1293 break;
1294 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s32:
1295 Param0 = 8;
1296 Param1 = 0;
1297 Param2 = 0;
1298 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1299 Param4 = llvm::PointerType::getUnqual(Int8Ty);
1300 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1301 break;
1302 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_s8:
1303 Param0 = 8;
1304 Param1 = 0;
1305 Param2 = 0;
1306 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
1307 Param4 = llvm::PointerType::getUnqual(Int8Ty);
1308 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
1309 break;
1310 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u16:
1311 Param0 = 8;
1312 Param1 = 0;
1313 Param2 = 1;
1314 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
1315 Param4 = llvm::PointerType::getUnqual(Int8Ty);
1316 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1317 break;
1318 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u32:
1319 Param0 = 8;
1320 Param1 = 0;
1321 Param2 = 1;
1322 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1323 Param4 = llvm::PointerType::getUnqual(Int8Ty);
1324 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1325 break;
1326 case ARM::BI__builtin_arm_mve_vldrbq_gather_offset_u8:
1327 Param0 = 8;
1328 Param1 = 0;
1329 Param2 = 1;
1330 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
1331 Param4 = llvm::PointerType::getUnqual(Int8Ty);
1332 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
1333 break;
1334 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_s64:
1335 Param0 = 64;
1336 Param1 = 0;
1337 Param2 = 0;
1338 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
1339 Param4 = llvm::PointerType::getUnqual(Int64Ty);
1340 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
1341 break;
1342 case ARM::BI__builtin_arm_mve_vldrdq_gather_offset_u64:
1343 Param0 = 64;
1344 Param1 = 0;
1345 Param2 = 1;
1346 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
1347 Param4 = llvm::PointerType::getUnqual(Int64Ty);
1348 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
1349 break;
1350 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_s64:
1351 Param0 = 64;
1352 Param1 = 3;
1353 Param2 = 0;
1354 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
1355 Param4 = llvm::PointerType::getUnqual(Int64Ty);
1356 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
1357 break;
1358 case ARM::BI__builtin_arm_mve_vldrdq_gather_shifted_offset_u64:
1359 Param0 = 64;
1360 Param1 = 3;
1361 Param2 = 1;
1362 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
1363 Param4 = llvm::PointerType::getUnqual(Int64Ty);
1364 Param5 = llvm::FixedVectorType::get(Int64Ty, 2);
1365 break;
1366 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_f16:
1367 Param0 = 16;
1368 Param1 = 0;
1369 Param2 = 0;
1370 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
1371 Param4 = llvm::PointerType::getUnqual(HalfTy);
1372 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1373 break;
1374 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s16:
1375 Param0 = 16;
1376 Param1 = 0;
1377 Param2 = 0;
1378 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
1379 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1380 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1381 break;
1382 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_s32:
1383 Param0 = 16;
1384 Param1 = 0;
1385 Param2 = 0;
1386 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1387 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1388 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1389 break;
1390 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u16:
1391 Param0 = 16;
1392 Param1 = 0;
1393 Param2 = 1;
1394 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
1395 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1396 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1397 break;
1398 case ARM::BI__builtin_arm_mve_vldrhq_gather_offset_u32:
1399 Param0 = 16;
1400 Param1 = 0;
1401 Param2 = 1;
1402 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1403 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1404 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1405 break;
1406 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_f16:
1407 Param0 = 16;
1408 Param1 = 1;
1409 Param2 = 0;
1410 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
1411 Param4 = llvm::PointerType::getUnqual(HalfTy);
1412 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1413 break;
1414 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s16:
1415 Param0 = 16;
1416 Param1 = 1;
1417 Param2 = 0;
1418 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
1419 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1420 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1421 break;
1422 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_s32:
1423 Param0 = 16;
1424 Param1 = 1;
1425 Param2 = 0;
1426 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1427 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1428 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1429 break;
1430 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u16:
1431 Param0 = 16;
1432 Param1 = 1;
1433 Param2 = 1;
1434 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
1435 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1436 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
1437 break;
1438 case ARM::BI__builtin_arm_mve_vldrhq_gather_shifted_offset_u32:
1439 Param0 = 16;
1440 Param1 = 1;
1441 Param2 = 1;
1442 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1443 Param4 = llvm::PointerType::getUnqual(Int16Ty);
1444 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1445 break;
1446 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_f32:
1447 Param0 = 32;
1448 Param1 = 0;
1449 Param2 = 0;
1450 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
1451 Param4 = llvm::PointerType::getUnqual(FloatTy);
1452 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1453 break;
1454 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_s32:
1455 Param0 = 32;
1456 Param1 = 0;
1457 Param2 = 0;
1458 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1459 Param4 = llvm::PointerType::getUnqual(Int32Ty);
1460 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1461 break;
1462 case ARM::BI__builtin_arm_mve_vldrwq_gather_offset_u32:
1463 Param0 = 32;
1464 Param1 = 0;
1465 Param2 = 1;
1466 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1467 Param4 = llvm::PointerType::getUnqual(Int32Ty);
1468 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1469 break;
1470 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_f32:
1471 Param0 = 32;
1472 Param1 = 2;
1473 Param2 = 0;
1474 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
1475 Param4 = llvm::PointerType::getUnqual(FloatTy);
1476 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1477 break;
1478 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_s32:
1479 Param0 = 32;
1480 Param1 = 2;
1481 Param2 = 0;
1482 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1483 Param4 = llvm::PointerType::getUnqual(Int32Ty);
1484 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1485 break;
1486 case ARM::BI__builtin_arm_mve_vldrwq_gather_shifted_offset_u32:
1487 Param0 = 32;
1488 Param1 = 2;
1489 Param2 = 1;
1490 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
1491 Param4 = llvm::PointerType::getUnqual(Int32Ty);
1492 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
1493 break;
1494 }
1495 Address Val0 = EmitPointerWithAlignment(E->getArg(0));
1496 Value *Val1 = EmitScalarExpr(E->getArg(1));
1497 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
1498 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
1499 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
1500 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_offset, {Param3, Param4, Param5}), {(Val0.getPointer()), Val1, Val2, Val3, Val4});
1501}
1502case ARM::BI__builtin_arm_mve_vshlcq_s16:
1503case ARM::BI__builtin_arm_mve_vshlcq_s32:
1504case ARM::BI__builtin_arm_mve_vshlcq_s8:
1505case ARM::BI__builtin_arm_mve_vshlcq_u16:
1506case ARM::BI__builtin_arm_mve_vshlcq_u32:
1507case ARM::BI__builtin_arm_mve_vshlcq_u8: {
1508 llvm::Type * Param0;
1509 switch (BuiltinID) {
1510 case ARM::BI__builtin_arm_mve_vshlcq_s16:
1511 Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
1512 break;
1513 case ARM::BI__builtin_arm_mve_vshlcq_s32:
1514 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
1515 break;
1516 case ARM::BI__builtin_arm_mve_vshlcq_s8:
1517 Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
1518 break;
1519 case ARM::BI__builtin_arm_mve_vshlcq_u16:
1520 Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
1521 break;
1522 case ARM::BI__builtin_arm_mve_vshlcq_u32:
1523 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
1524 break;
1525 case ARM::BI__builtin_arm_mve_vshlcq_u8:
1526 Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
1527 break;
1528 }
1529 Address Val0 = EmitPointerWithAlignment(E->getArg(1));
1530 Value *Val1 = Builder.CreateLoad(Val0);
1531 Value *Val2 = EmitScalarExpr(E->getArg(0));
1532 Value *Val3 = EmitScalarExpr(E->getArg(2));
1533 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshlc, {Param0}), {Val2, Val1, Val3});
1534 Value *Val5 = Builder.CreateExtractValue(Val4, static_cast<unsigned>(0));
1535 Builder.CreateStore(Val5, Val0);
1536 return Builder.CreateExtractValue(Val4, static_cast<unsigned>(1));
1537}
1538case ARM::BI__builtin_arm_mve_vddupq_m_wb_u16:
1539case ARM::BI__builtin_arm_mve_vddupq_m_wb_u32:
1540case ARM::BI__builtin_arm_mve_vddupq_m_wb_u8:
1541case ARM::BI__builtin_arm_mve_vidupq_m_wb_u16:
1542case ARM::BI__builtin_arm_mve_vidupq_m_wb_u32:
1543case ARM::BI__builtin_arm_mve_vidupq_m_wb_u8:
1544case ARM::BI__builtin_arm_mve_vshlcq_m_s16:
1545case ARM::BI__builtin_arm_mve_vshlcq_m_s32:
1546case ARM::BI__builtin_arm_mve_vshlcq_m_s8:
1547case ARM::BI__builtin_arm_mve_vshlcq_m_u16:
1548case ARM::BI__builtin_arm_mve_vshlcq_m_u32:
1549case ARM::BI__builtin_arm_mve_vshlcq_m_u8: {
1550 llvm::Type * Param0;
1551 Intrinsic::ID Param1;
1552 llvm::Type * Param2;
1553 unsigned Param3;
1554 unsigned Param4;
1555 switch (BuiltinID) {
1556 case ARM::BI__builtin_arm_mve_vddupq_m_wb_u16:
1557 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1558 Param1 = Intrinsic::arm_mve_vddup_predicated;
1559 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1560 Param3 = 1;
1561 Param4 = 0;
1562 break;
1563 case ARM::BI__builtin_arm_mve_vddupq_m_wb_u32:
1564 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1565 Param1 = Intrinsic::arm_mve_vddup_predicated;
1566 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
1567 Param3 = 1;
1568 Param4 = 0;
1569 break;
1570 case ARM::BI__builtin_arm_mve_vddupq_m_wb_u8:
1571 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1572 Param1 = Intrinsic::arm_mve_vddup_predicated;
1573 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1574 Param3 = 1;
1575 Param4 = 0;
1576 break;
1577 case ARM::BI__builtin_arm_mve_vidupq_m_wb_u16:
1578 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1579 Param1 = Intrinsic::arm_mve_vidup_predicated;
1580 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1581 Param3 = 1;
1582 Param4 = 0;
1583 break;
1584 case ARM::BI__builtin_arm_mve_vidupq_m_wb_u32:
1585 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1586 Param1 = Intrinsic::arm_mve_vidup_predicated;
1587 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
1588 Param3 = 1;
1589 Param4 = 0;
1590 break;
1591 case ARM::BI__builtin_arm_mve_vidupq_m_wb_u8:
1592 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1593 Param1 = Intrinsic::arm_mve_vidup_predicated;
1594 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1595 Param3 = 1;
1596 Param4 = 0;
1597 break;
1598 case ARM::BI__builtin_arm_mve_vshlcq_m_s16:
1599 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1600 Param1 = Intrinsic::arm_mve_vshlc_predicated;
1601 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1602 Param3 = 0;
1603 Param4 = 1;
1604 break;
1605 case ARM::BI__builtin_arm_mve_vshlcq_m_s32:
1606 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1607 Param1 = Intrinsic::arm_mve_vshlc_predicated;
1608 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
1609 Param3 = 0;
1610 Param4 = 1;
1611 break;
1612 case ARM::BI__builtin_arm_mve_vshlcq_m_s8:
1613 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1614 Param1 = Intrinsic::arm_mve_vshlc_predicated;
1615 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1616 Param3 = 0;
1617 Param4 = 1;
1618 break;
1619 case ARM::BI__builtin_arm_mve_vshlcq_m_u16:
1620 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1621 Param1 = Intrinsic::arm_mve_vshlc_predicated;
1622 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1623 Param3 = 0;
1624 Param4 = 1;
1625 break;
1626 case ARM::BI__builtin_arm_mve_vshlcq_m_u32:
1627 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1628 Param1 = Intrinsic::arm_mve_vshlc_predicated;
1629 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
1630 Param3 = 0;
1631 Param4 = 1;
1632 break;
1633 case ARM::BI__builtin_arm_mve_vshlcq_m_u8:
1634 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1635 Param1 = Intrinsic::arm_mve_vshlc_predicated;
1636 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1637 Param3 = 0;
1638 Param4 = 1;
1639 break;
1640 }
1641 Address Val0 = EmitPointerWithAlignment(E->getArg(1));
1642 Value *Val1 = Builder.CreateLoad(Val0);
1643 Value *Val2 = EmitScalarExpr(E->getArg(0));
1644 Value *Val3 = EmitScalarExpr(E->getArg(2));
1645 Value *Val4 = EmitScalarExpr(E->getArg(3));
1646 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
1647 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
1648 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val2, Val1, Val3, Val6});
1649 Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(Param3));
1650 Builder.CreateStore(Val8, Val0);
1651 return Builder.CreateExtractValue(Val7, static_cast<unsigned>(Param4));
1652}
1653case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u16:
1654case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u32:
1655case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u8:
1656case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u16:
1657case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u32:
1658case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u8: {
1659 llvm::Type * Param0;
1660 Intrinsic::ID Param1;
1661 llvm::Type * Param2;
1662 switch (BuiltinID) {
1663 case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u16:
1664 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1665 Param1 = Intrinsic::arm_mve_vdwdup_predicated;
1666 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1667 break;
1668 case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u32:
1669 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1670 Param1 = Intrinsic::arm_mve_vdwdup_predicated;
1671 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
1672 break;
1673 case ARM::BI__builtin_arm_mve_vdwdupq_m_wb_u8:
1674 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1675 Param1 = Intrinsic::arm_mve_vdwdup_predicated;
1676 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1677 break;
1678 case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u16:
1679 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1680 Param1 = Intrinsic::arm_mve_viwdup_predicated;
1681 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1682 break;
1683 case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u32:
1684 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1685 Param1 = Intrinsic::arm_mve_viwdup_predicated;
1686 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
1687 break;
1688 case ARM::BI__builtin_arm_mve_viwdupq_m_wb_u8:
1689 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1690 Param1 = Intrinsic::arm_mve_viwdup_predicated;
1691 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1692 break;
1693 }
1694 Address Val0 = EmitPointerWithAlignment(E->getArg(1));
1695 Value *Val1 = Builder.CreateLoad(Val0);
1696 Value *Val2 = EmitScalarExpr(E->getArg(0));
1697 Value *Val3 = EmitScalarExpr(E->getArg(2));
1698 Value *Val4 = EmitScalarExpr(E->getArg(3));
1699 Value *Val5 = EmitScalarExpr(E->getArg(4));
1700 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
1701 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
1702 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val2, Val1, Val3, Val4, Val7});
1703 Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
1704 Builder.CreateStore(Val9, Val0);
1705 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
1706}
1707case ARM::BI__builtin_arm_mve_vld2q_f16:
1708case ARM::BI__builtin_arm_mve_vld2q_f32:
1709case ARM::BI__builtin_arm_mve_vld2q_s16:
1710case ARM::BI__builtin_arm_mve_vld2q_s32:
1711case ARM::BI__builtin_arm_mve_vld2q_s8:
1712case ARM::BI__builtin_arm_mve_vld2q_u16:
1713case ARM::BI__builtin_arm_mve_vld2q_u32:
1714case ARM::BI__builtin_arm_mve_vld2q_u8: {
1715 CustomCodeGenType = CustomCodeGen::VLD24;
1716 IRIntr = Intrinsic::arm_mve_vld2q;
1717 NumVectors = 2;
1718 break; // custom code gen
1719}
1720case ARM::BI__builtin_arm_mve_vld4q_f16:
1721case ARM::BI__builtin_arm_mve_vld4q_f32:
1722case ARM::BI__builtin_arm_mve_vld4q_s16:
1723case ARM::BI__builtin_arm_mve_vld4q_s32:
1724case ARM::BI__builtin_arm_mve_vld4q_s8:
1725case ARM::BI__builtin_arm_mve_vld4q_u16:
1726case ARM::BI__builtin_arm_mve_vld4q_u32:
1727case ARM::BI__builtin_arm_mve_vld4q_u8: {
1728 CustomCodeGenType = CustomCodeGen::VLD24;
1729 IRIntr = Intrinsic::arm_mve_vld4q;
1730 NumVectors = 4;
1731 break; // custom code gen
1732}
1733case ARM::BI__builtin_arm_mve_vst2q_f16:
1734case ARM::BI__builtin_arm_mve_vst2q_f32:
1735case ARM::BI__builtin_arm_mve_vst2q_s16:
1736case ARM::BI__builtin_arm_mve_vst2q_s32:
1737case ARM::BI__builtin_arm_mve_vst2q_s8:
1738case ARM::BI__builtin_arm_mve_vst2q_u16:
1739case ARM::BI__builtin_arm_mve_vst2q_u32:
1740case ARM::BI__builtin_arm_mve_vst2q_u8: {
1741 CustomCodeGenType = CustomCodeGen::VST24;
1742 IRIntr = Intrinsic::arm_mve_vst2q;
1743 NumVectors = 2;
1744 break; // custom code gen
1745}
1746case ARM::BI__builtin_arm_mve_vst4q_f16:
1747case ARM::BI__builtin_arm_mve_vst4q_f32:
1748case ARM::BI__builtin_arm_mve_vst4q_s16:
1749case ARM::BI__builtin_arm_mve_vst4q_s32:
1750case ARM::BI__builtin_arm_mve_vst4q_s8:
1751case ARM::BI__builtin_arm_mve_vst4q_u16:
1752case ARM::BI__builtin_arm_mve_vst4q_u32:
1753case ARM::BI__builtin_arm_mve_vst4q_u8: {
1754 CustomCodeGenType = CustomCodeGen::VST24;
1755 IRIntr = Intrinsic::arm_mve_vst4q;
1756 NumVectors = 4;
1757 break; // custom code gen
1758}
1759case ARM::BI__builtin_arm_mve_vmaxnmaq_f16:
1760case ARM::BI__builtin_arm_mve_vmaxnmaq_f32:
1761case ARM::BI__builtin_arm_mve_vminnmaq_f16:
1762case ARM::BI__builtin_arm_mve_vminnmaq_f32: {
1763 llvm::Type * Param0;
1764 Intrinsic::ID Param1;
1765 switch (BuiltinID) {
1766 case ARM::BI__builtin_arm_mve_vmaxnmaq_f16:
1767 Param0 = llvm::FixedVectorType::get(HalfTy, 8);
1768 Param1 = Intrinsic::maxnum;
1769 break;
1770 case ARM::BI__builtin_arm_mve_vmaxnmaq_f32:
1771 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
1772 Param1 = Intrinsic::maxnum;
1773 break;
1774 case ARM::BI__builtin_arm_mve_vminnmaq_f16:
1775 Param0 = llvm::FixedVectorType::get(HalfTy, 8);
1776 Param1 = Intrinsic::minnum;
1777 break;
1778 case ARM::BI__builtin_arm_mve_vminnmaq_f32:
1779 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
1780 Param1 = Intrinsic::minnum;
1781 break;
1782 }
1783 Value *Val0 = EmitScalarExpr(E->getArg(0));
1784 Value *Val1 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fabs, {Param0}), {Val0});
1785 Value *Val2 = EmitScalarExpr(E->getArg(1));
1786 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fabs, {Param0}), {Val2});
1787 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param0}), {Val1, Val3});
1788}
1789case ARM::BI__builtin_arm_mve_vctp16q:
1790case ARM::BI__builtin_arm_mve_vctp32q:
1791case ARM::BI__builtin_arm_mve_vctp64q:
1792case ARM::BI__builtin_arm_mve_vctp8q: {
1793 Intrinsic::ID Param0;
1794 llvm::Type * Param1;
1795 switch (BuiltinID) {
1796 case ARM::BI__builtin_arm_mve_vctp16q:
1797 Param0 = Intrinsic::arm_mve_vctp16;
1798 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1799 break;
1800 case ARM::BI__builtin_arm_mve_vctp32q:
1801 Param0 = Intrinsic::arm_mve_vctp32;
1802 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1803 break;
1804 case ARM::BI__builtin_arm_mve_vctp64q:
1805 Param0 = Intrinsic::arm_mve_vctp64;
1806 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
1807 break;
1808 case ARM::BI__builtin_arm_mve_vctp8q:
1809 Param0 = Intrinsic::arm_mve_vctp8;
1810 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1811 break;
1812 }
1813 Value *Val0 = EmitScalarExpr(E->getArg(0));
1814 Value *Val1 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0});
1815 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param1}), {Val1});
1816 return Builder.CreateIntCast(Val2, Int16Ty, false);
1817}
1818case ARM::BI__builtin_arm_mve_vmvnq_n_s32:
1819case ARM::BI__builtin_arm_mve_vmvnq_n_u32: {
1820 bool Param0;
1821 switch (BuiltinID) {
1822 case ARM::BI__builtin_arm_mve_vmvnq_n_s32:
1823 Param0 = true;
1824 break;
1825 case ARM::BI__builtin_arm_mve_vmvnq_n_u32:
1826 Param0 = false;
1827 break;
1828 }
1829 Value *Val0 = EmitScalarExpr(E->getArg(0));
1830 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, Param0);
1831 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
1832 return Builder.CreateNot(Val2);
1833}
1834case ARM::BI__builtin_arm_mve_vmvnq_n_s16:
1835case ARM::BI__builtin_arm_mve_vmvnq_n_u16: {
1836 bool Param0;
1837 switch (BuiltinID) {
1838 case ARM::BI__builtin_arm_mve_vmvnq_n_s16:
1839 Param0 = true;
1840 break;
1841 case ARM::BI__builtin_arm_mve_vmvnq_n_u16:
1842 Param0 = false;
1843 break;
1844 }
1845 Value *Val0 = EmitScalarExpr(E->getArg(0));
1846 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
1847 Value *Val2 = Builder.CreateIntCast(Val1, Int16Ty, Param0);
1848 Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
1849 return Builder.CreateNot(Val3);
1850}
1851case ARM::BI__builtin_arm_mve_vmaxavq_s16:
1852case ARM::BI__builtin_arm_mve_vmaxavq_s8:
1853case ARM::BI__builtin_arm_mve_vminavq_s16:
1854case ARM::BI__builtin_arm_mve_vminavq_s8: {
1855 Intrinsic::ID Param0;
1856 llvm::Type * Param1;
1857 llvm::Type * Param2;
1858 switch (BuiltinID) {
1859 case ARM::BI__builtin_arm_mve_vmaxavq_s16:
1860 Param0 = Intrinsic::arm_mve_maxav;
1861 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
1862 Param2 = Int16Ty;
1863 break;
1864 case ARM::BI__builtin_arm_mve_vmaxavq_s8:
1865 Param0 = Intrinsic::arm_mve_maxav;
1866 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
1867 Param2 = Int8Ty;
1868 break;
1869 case ARM::BI__builtin_arm_mve_vminavq_s16:
1870 Param0 = Intrinsic::arm_mve_minav;
1871 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
1872 Param2 = Int16Ty;
1873 break;
1874 case ARM::BI__builtin_arm_mve_vminavq_s8:
1875 Param0 = Intrinsic::arm_mve_minav;
1876 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
1877 Param2 = Int8Ty;
1878 break;
1879 }
1880 Value *Val0 = EmitScalarExpr(E->getArg(0));
1881 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
1882 Value *Val2 = EmitScalarExpr(E->getArg(1));
1883 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val1, Val2});
1884 return Builder.CreateIntCast(Val3, Param2, false);
1885}
1886case ARM::BI__builtin_arm_mve_vmaxavq_p_s16:
1887case ARM::BI__builtin_arm_mve_vmaxavq_p_s8:
1888case ARM::BI__builtin_arm_mve_vminavq_p_s16:
1889case ARM::BI__builtin_arm_mve_vminavq_p_s8: {
1890 llvm::Type * Param0;
1891 Intrinsic::ID Param1;
1892 llvm::Type * Param2;
1893 llvm::Type * Param3;
1894 switch (BuiltinID) {
1895 case ARM::BI__builtin_arm_mve_vmaxavq_p_s16:
1896 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1897 Param1 = Intrinsic::arm_mve_maxav_predicated;
1898 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1899 Param3 = Int16Ty;
1900 break;
1901 case ARM::BI__builtin_arm_mve_vmaxavq_p_s8:
1902 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1903 Param1 = Intrinsic::arm_mve_maxav_predicated;
1904 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1905 Param3 = Int8Ty;
1906 break;
1907 case ARM::BI__builtin_arm_mve_vminavq_p_s16:
1908 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
1909 Param1 = Intrinsic::arm_mve_minav_predicated;
1910 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1911 Param3 = Int16Ty;
1912 break;
1913 case ARM::BI__builtin_arm_mve_vminavq_p_s8:
1914 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
1915 Param1 = Intrinsic::arm_mve_minav_predicated;
1916 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1917 Param3 = Int8Ty;
1918 break;
1919 }
1920 Value *Val0 = EmitScalarExpr(E->getArg(0));
1921 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
1922 Value *Val2 = EmitScalarExpr(E->getArg(1));
1923 Value *Val3 = EmitScalarExpr(E->getArg(2));
1924 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
1925 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
1926 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val1, Val2, Val5});
1927 return Builder.CreateIntCast(Val6, Param3, false);
1928}
1929case ARM::BI__builtin_arm_mve_vmaxvq_s16:
1930case ARM::BI__builtin_arm_mve_vmaxvq_s8:
1931case ARM::BI__builtin_arm_mve_vmaxvq_u16:
1932case ARM::BI__builtin_arm_mve_vmaxvq_u8:
1933case ARM::BI__builtin_arm_mve_vminvq_s16:
1934case ARM::BI__builtin_arm_mve_vminvq_s8:
1935case ARM::BI__builtin_arm_mve_vminvq_u16:
1936case ARM::BI__builtin_arm_mve_vminvq_u8: {
1937 uint32_t Param0;
1938 Intrinsic::ID Param1;
1939 llvm::Type * Param2;
1940 llvm::Type * Param3;
1941 bool Param4;
1942 switch (BuiltinID) {
1943 case ARM::BI__builtin_arm_mve_vmaxvq_s16:
1944 Param0 = 0;
1945 Param1 = Intrinsic::arm_mve_maxv;
1946 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1947 Param3 = Int16Ty;
1948 Param4 = true;
1949 break;
1950 case ARM::BI__builtin_arm_mve_vmaxvq_s8:
1951 Param0 = 0;
1952 Param1 = Intrinsic::arm_mve_maxv;
1953 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1954 Param3 = Int8Ty;
1955 Param4 = true;
1956 break;
1957 case ARM::BI__builtin_arm_mve_vmaxvq_u16:
1958 Param0 = 1;
1959 Param1 = Intrinsic::arm_mve_maxv;
1960 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1961 Param3 = Int16Ty;
1962 Param4 = false;
1963 break;
1964 case ARM::BI__builtin_arm_mve_vmaxvq_u8:
1965 Param0 = 1;
1966 Param1 = Intrinsic::arm_mve_maxv;
1967 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1968 Param3 = Int8Ty;
1969 Param4 = false;
1970 break;
1971 case ARM::BI__builtin_arm_mve_vminvq_s16:
1972 Param0 = 0;
1973 Param1 = Intrinsic::arm_mve_minv;
1974 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1975 Param3 = Int16Ty;
1976 Param4 = true;
1977 break;
1978 case ARM::BI__builtin_arm_mve_vminvq_s8:
1979 Param0 = 0;
1980 Param1 = Intrinsic::arm_mve_minv;
1981 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1982 Param3 = Int8Ty;
1983 Param4 = true;
1984 break;
1985 case ARM::BI__builtin_arm_mve_vminvq_u16:
1986 Param0 = 1;
1987 Param1 = Intrinsic::arm_mve_minv;
1988 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
1989 Param3 = Int16Ty;
1990 Param4 = false;
1991 break;
1992 case ARM::BI__builtin_arm_mve_vminvq_u8:
1993 Param0 = 1;
1994 Param1 = Intrinsic::arm_mve_minv;
1995 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
1996 Param3 = Int8Ty;
1997 Param4 = false;
1998 break;
1999 }
2000 Value *Val0 = EmitScalarExpr(E->getArg(0));
2001 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
2002 Value *Val2 = EmitScalarExpr(E->getArg(1));
2003 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
2004 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val1, Val2, Val3});
2005 return Builder.CreateIntCast(Val4, Param3, Param4);
2006}
2007case ARM::BI__builtin_arm_mve_vmaxvq_p_s16:
2008case ARM::BI__builtin_arm_mve_vmaxvq_p_s8:
2009case ARM::BI__builtin_arm_mve_vmaxvq_p_u16:
2010case ARM::BI__builtin_arm_mve_vmaxvq_p_u8:
2011case ARM::BI__builtin_arm_mve_vminvq_p_s16:
2012case ARM::BI__builtin_arm_mve_vminvq_p_s8:
2013case ARM::BI__builtin_arm_mve_vminvq_p_u16:
2014case ARM::BI__builtin_arm_mve_vminvq_p_u8: {
2015 uint32_t Param0;
2016 llvm::Type * Param1;
2017 Intrinsic::ID Param2;
2018 llvm::Type * Param3;
2019 llvm::Type * Param4;
2020 bool Param5;
2021 switch (BuiltinID) {
2022 case ARM::BI__builtin_arm_mve_vmaxvq_p_s16:
2023 Param0 = 0;
2024 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2025 Param2 = Intrinsic::arm_mve_maxv_predicated;
2026 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
2027 Param4 = Int16Ty;
2028 Param5 = true;
2029 break;
2030 case ARM::BI__builtin_arm_mve_vmaxvq_p_s8:
2031 Param0 = 0;
2032 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2033 Param2 = Intrinsic::arm_mve_maxv_predicated;
2034 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
2035 Param4 = Int8Ty;
2036 Param5 = true;
2037 break;
2038 case ARM::BI__builtin_arm_mve_vmaxvq_p_u16:
2039 Param0 = 1;
2040 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2041 Param2 = Intrinsic::arm_mve_maxv_predicated;
2042 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
2043 Param4 = Int16Ty;
2044 Param5 = false;
2045 break;
2046 case ARM::BI__builtin_arm_mve_vmaxvq_p_u8:
2047 Param0 = 1;
2048 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2049 Param2 = Intrinsic::arm_mve_maxv_predicated;
2050 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
2051 Param4 = Int8Ty;
2052 Param5 = false;
2053 break;
2054 case ARM::BI__builtin_arm_mve_vminvq_p_s16:
2055 Param0 = 0;
2056 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2057 Param2 = Intrinsic::arm_mve_minv_predicated;
2058 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
2059 Param4 = Int16Ty;
2060 Param5 = true;
2061 break;
2062 case ARM::BI__builtin_arm_mve_vminvq_p_s8:
2063 Param0 = 0;
2064 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2065 Param2 = Intrinsic::arm_mve_minv_predicated;
2066 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
2067 Param4 = Int8Ty;
2068 Param5 = true;
2069 break;
2070 case ARM::BI__builtin_arm_mve_vminvq_p_u16:
2071 Param0 = 1;
2072 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2073 Param2 = Intrinsic::arm_mve_minv_predicated;
2074 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
2075 Param4 = Int16Ty;
2076 Param5 = false;
2077 break;
2078 case ARM::BI__builtin_arm_mve_vminvq_p_u8:
2079 Param0 = 1;
2080 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2081 Param2 = Intrinsic::arm_mve_minv_predicated;
2082 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
2083 Param4 = Int8Ty;
2084 Param5 = false;
2085 break;
2086 }
2087 Value *Val0 = EmitScalarExpr(E->getArg(0));
2088 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
2089 Value *Val2 = EmitScalarExpr(E->getArg(1));
2090 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
2091 Value *Val4 = EmitScalarExpr(E->getArg(2));
2092 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
2093 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
2094 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val1, Val2, Val3, Val6});
2095 return Builder.CreateIntCast(Val7, Param4, Param5);
2096}
2097case ARM::BI__builtin_arm_mve_vadcq_s32:
2098case ARM::BI__builtin_arm_mve_vadcq_u32:
2099case ARM::BI__builtin_arm_mve_vsbcq_s32:
2100case ARM::BI__builtin_arm_mve_vsbcq_u32: {
2101 Intrinsic::ID Param0;
2102 switch (BuiltinID) {
2103 case ARM::BI__builtin_arm_mve_vadcq_s32:
2104 Param0 = Intrinsic::arm_mve_vadc;
2105 break;
2106 case ARM::BI__builtin_arm_mve_vadcq_u32:
2107 Param0 = Intrinsic::arm_mve_vadc;
2108 break;
2109 case ARM::BI__builtin_arm_mve_vsbcq_s32:
2110 Param0 = Intrinsic::arm_mve_vsbc;
2111 break;
2112 case ARM::BI__builtin_arm_mve_vsbcq_u32:
2113 Param0 = Intrinsic::arm_mve_vsbc;
2114 break;
2115 }
2116 Value *Val0 = EmitScalarExpr(E->getArg(0));
2117 Value *Val1 = EmitScalarExpr(E->getArg(1));
2118 Address Val2 = EmitPointerWithAlignment(E->getArg(2));
2119 Value *Val3 = Builder.CreateLoad(Val2);
2120 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 29);
2121 Value *Val5 = Builder.CreateShl(Val3, Val4);
2122 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1, Val5});
2123 Value *Val7 = llvm::ConstantInt::get(Int32Ty, 1);
2124 Value *Val8 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(1));
2125 Value *Val9 = llvm::ConstantInt::get(Int32Ty, 29);
2126 Value *Val10 = Builder.CreateLShr(Val8, Val9);
2127 Value *Val11 = Builder.CreateAnd(Val7, Val10);
2128 Builder.CreateStore(Val11, Val2);
2129 return Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
2130}
2131case ARM::BI__builtin_arm_mve_vcmpeqq_n_f16:
2132case ARM::BI__builtin_arm_mve_vcmpeqq_n_f32: {
2133 llvm::Type * Param0;
2134 switch (BuiltinID) {
2135 case ARM::BI__builtin_arm_mve_vcmpeqq_n_f16:
2136 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2137 break;
2138 case ARM::BI__builtin_arm_mve_vcmpeqq_n_f32:
2139 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2140 break;
2141 }
2142 Value *Val0 = EmitScalarExpr(E->getArg(0));
2143 Value *Val1 = EmitScalarExpr(E->getArg(1));
2144 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2145 Value *Val3 = Builder.CreateFCmpOEQ(Val0, Val2);
2146 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2147 return Builder.CreateIntCast(Val4, Int16Ty, false);
2148}
2149case ARM::BI__builtin_arm_mve_vcmpgeq_n_f16:
2150case ARM::BI__builtin_arm_mve_vcmpgeq_n_f32: {
2151 llvm::Type * Param0;
2152 switch (BuiltinID) {
2153 case ARM::BI__builtin_arm_mve_vcmpgeq_n_f16:
2154 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2155 break;
2156 case ARM::BI__builtin_arm_mve_vcmpgeq_n_f32:
2157 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2158 break;
2159 }
2160 Value *Val0 = EmitScalarExpr(E->getArg(0));
2161 Value *Val1 = EmitScalarExpr(E->getArg(1));
2162 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2163 Value *Val3 = Builder.CreateFCmpOGE(Val0, Val2);
2164 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2165 return Builder.CreateIntCast(Val4, Int16Ty, false);
2166}
2167case ARM::BI__builtin_arm_mve_vcmpgtq_n_f16:
2168case ARM::BI__builtin_arm_mve_vcmpgtq_n_f32: {
2169 llvm::Type * Param0;
2170 switch (BuiltinID) {
2171 case ARM::BI__builtin_arm_mve_vcmpgtq_n_f16:
2172 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2173 break;
2174 case ARM::BI__builtin_arm_mve_vcmpgtq_n_f32:
2175 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2176 break;
2177 }
2178 Value *Val0 = EmitScalarExpr(E->getArg(0));
2179 Value *Val1 = EmitScalarExpr(E->getArg(1));
2180 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2181 Value *Val3 = Builder.CreateFCmpOGT(Val0, Val2);
2182 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2183 return Builder.CreateIntCast(Val4, Int16Ty, false);
2184}
2185case ARM::BI__builtin_arm_mve_vcmpleq_n_f16:
2186case ARM::BI__builtin_arm_mve_vcmpleq_n_f32: {
2187 llvm::Type * Param0;
2188 switch (BuiltinID) {
2189 case ARM::BI__builtin_arm_mve_vcmpleq_n_f16:
2190 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2191 break;
2192 case ARM::BI__builtin_arm_mve_vcmpleq_n_f32:
2193 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2194 break;
2195 }
2196 Value *Val0 = EmitScalarExpr(E->getArg(0));
2197 Value *Val1 = EmitScalarExpr(E->getArg(1));
2198 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2199 Value *Val3 = Builder.CreateFCmpOLE(Val0, Val2);
2200 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2201 return Builder.CreateIntCast(Val4, Int16Ty, false);
2202}
2203case ARM::BI__builtin_arm_mve_vcmpltq_n_f16:
2204case ARM::BI__builtin_arm_mve_vcmpltq_n_f32: {
2205 llvm::Type * Param0;
2206 switch (BuiltinID) {
2207 case ARM::BI__builtin_arm_mve_vcmpltq_n_f16:
2208 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2209 break;
2210 case ARM::BI__builtin_arm_mve_vcmpltq_n_f32:
2211 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2212 break;
2213 }
2214 Value *Val0 = EmitScalarExpr(E->getArg(0));
2215 Value *Val1 = EmitScalarExpr(E->getArg(1));
2216 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2217 Value *Val3 = Builder.CreateFCmpOLT(Val0, Val2);
2218 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2219 return Builder.CreateIntCast(Val4, Int16Ty, false);
2220}
2221case ARM::BI__builtin_arm_mve_vcmpneq_n_f16:
2222case ARM::BI__builtin_arm_mve_vcmpneq_n_f32: {
2223 llvm::Type * Param0;
2224 switch (BuiltinID) {
2225 case ARM::BI__builtin_arm_mve_vcmpneq_n_f16:
2226 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2227 break;
2228 case ARM::BI__builtin_arm_mve_vcmpneq_n_f32:
2229 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2230 break;
2231 }
2232 Value *Val0 = EmitScalarExpr(E->getArg(0));
2233 Value *Val1 = EmitScalarExpr(E->getArg(1));
2234 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2235 Value *Val3 = Builder.CreateFCmpUNE(Val0, Val2);
2236 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2237 return Builder.CreateIntCast(Val4, Int16Ty, false);
2238}
2239case ARM::BI__builtin_arm_mve_vcmpeqq_n_s16:
2240case ARM::BI__builtin_arm_mve_vcmpeqq_n_s32:
2241case ARM::BI__builtin_arm_mve_vcmpeqq_n_s8:
2242case ARM::BI__builtin_arm_mve_vcmpeqq_n_u16:
2243case ARM::BI__builtin_arm_mve_vcmpeqq_n_u32:
2244case ARM::BI__builtin_arm_mve_vcmpeqq_n_u8: {
2245 llvm::Type * Param0;
2246 switch (BuiltinID) {
2247 case ARM::BI__builtin_arm_mve_vcmpeqq_n_s16:
2248 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2249 break;
2250 case ARM::BI__builtin_arm_mve_vcmpeqq_n_s32:
2251 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2252 break;
2253 case ARM::BI__builtin_arm_mve_vcmpeqq_n_s8:
2254 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2255 break;
2256 case ARM::BI__builtin_arm_mve_vcmpeqq_n_u16:
2257 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2258 break;
2259 case ARM::BI__builtin_arm_mve_vcmpeqq_n_u32:
2260 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2261 break;
2262 case ARM::BI__builtin_arm_mve_vcmpeqq_n_u8:
2263 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2264 break;
2265 }
2266 Value *Val0 = EmitScalarExpr(E->getArg(0));
2267 Value *Val1 = EmitScalarExpr(E->getArg(1));
2268 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2269 Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
2270 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2271 return Builder.CreateIntCast(Val4, Int16Ty, false);
2272}
2273case ARM::BI__builtin_arm_mve_vcmpneq_n_s16:
2274case ARM::BI__builtin_arm_mve_vcmpneq_n_s32:
2275case ARM::BI__builtin_arm_mve_vcmpneq_n_s8:
2276case ARM::BI__builtin_arm_mve_vcmpneq_n_u16:
2277case ARM::BI__builtin_arm_mve_vcmpneq_n_u32:
2278case ARM::BI__builtin_arm_mve_vcmpneq_n_u8: {
2279 llvm::Type * Param0;
2280 switch (BuiltinID) {
2281 case ARM::BI__builtin_arm_mve_vcmpneq_n_s16:
2282 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2283 break;
2284 case ARM::BI__builtin_arm_mve_vcmpneq_n_s32:
2285 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2286 break;
2287 case ARM::BI__builtin_arm_mve_vcmpneq_n_s8:
2288 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2289 break;
2290 case ARM::BI__builtin_arm_mve_vcmpneq_n_u16:
2291 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2292 break;
2293 case ARM::BI__builtin_arm_mve_vcmpneq_n_u32:
2294 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2295 break;
2296 case ARM::BI__builtin_arm_mve_vcmpneq_n_u8:
2297 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2298 break;
2299 }
2300 Value *Val0 = EmitScalarExpr(E->getArg(0));
2301 Value *Val1 = EmitScalarExpr(E->getArg(1));
2302 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2303 Value *Val3 = Builder.CreateICmpNE(Val0, Val2);
2304 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2305 return Builder.CreateIntCast(Val4, Int16Ty, false);
2306}
2307case ARM::BI__builtin_arm_mve_vcmpgeq_n_s16:
2308case ARM::BI__builtin_arm_mve_vcmpgeq_n_s32:
2309case ARM::BI__builtin_arm_mve_vcmpgeq_n_s8: {
2310 llvm::Type * Param0;
2311 switch (BuiltinID) {
2312 case ARM::BI__builtin_arm_mve_vcmpgeq_n_s16:
2313 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2314 break;
2315 case ARM::BI__builtin_arm_mve_vcmpgeq_n_s32:
2316 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2317 break;
2318 case ARM::BI__builtin_arm_mve_vcmpgeq_n_s8:
2319 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2320 break;
2321 }
2322 Value *Val0 = EmitScalarExpr(E->getArg(0));
2323 Value *Val1 = EmitScalarExpr(E->getArg(1));
2324 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2325 Value *Val3 = Builder.CreateICmpSGE(Val0, Val2);
2326 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2327 return Builder.CreateIntCast(Val4, Int16Ty, false);
2328}
2329case ARM::BI__builtin_arm_mve_vcmpgtq_n_s16:
2330case ARM::BI__builtin_arm_mve_vcmpgtq_n_s32:
2331case ARM::BI__builtin_arm_mve_vcmpgtq_n_s8: {
2332 llvm::Type * Param0;
2333 switch (BuiltinID) {
2334 case ARM::BI__builtin_arm_mve_vcmpgtq_n_s16:
2335 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2336 break;
2337 case ARM::BI__builtin_arm_mve_vcmpgtq_n_s32:
2338 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2339 break;
2340 case ARM::BI__builtin_arm_mve_vcmpgtq_n_s8:
2341 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2342 break;
2343 }
2344 Value *Val0 = EmitScalarExpr(E->getArg(0));
2345 Value *Val1 = EmitScalarExpr(E->getArg(1));
2346 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2347 Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
2348 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2349 return Builder.CreateIntCast(Val4, Int16Ty, false);
2350}
2351case ARM::BI__builtin_arm_mve_vcmpleq_n_s16:
2352case ARM::BI__builtin_arm_mve_vcmpleq_n_s32:
2353case ARM::BI__builtin_arm_mve_vcmpleq_n_s8: {
2354 llvm::Type * Param0;
2355 switch (BuiltinID) {
2356 case ARM::BI__builtin_arm_mve_vcmpleq_n_s16:
2357 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2358 break;
2359 case ARM::BI__builtin_arm_mve_vcmpleq_n_s32:
2360 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2361 break;
2362 case ARM::BI__builtin_arm_mve_vcmpleq_n_s8:
2363 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2364 break;
2365 }
2366 Value *Val0 = EmitScalarExpr(E->getArg(0));
2367 Value *Val1 = EmitScalarExpr(E->getArg(1));
2368 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2369 Value *Val3 = Builder.CreateICmpSLE(Val0, Val2);
2370 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2371 return Builder.CreateIntCast(Val4, Int16Ty, false);
2372}
2373case ARM::BI__builtin_arm_mve_vcmpltq_n_s16:
2374case ARM::BI__builtin_arm_mve_vcmpltq_n_s32:
2375case ARM::BI__builtin_arm_mve_vcmpltq_n_s8: {
2376 llvm::Type * Param0;
2377 switch (BuiltinID) {
2378 case ARM::BI__builtin_arm_mve_vcmpltq_n_s16:
2379 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2380 break;
2381 case ARM::BI__builtin_arm_mve_vcmpltq_n_s32:
2382 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2383 break;
2384 case ARM::BI__builtin_arm_mve_vcmpltq_n_s8:
2385 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2386 break;
2387 }
2388 Value *Val0 = EmitScalarExpr(E->getArg(0));
2389 Value *Val1 = EmitScalarExpr(E->getArg(1));
2390 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2391 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
2392 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2393 return Builder.CreateIntCast(Val4, Int16Ty, false);
2394}
2395case ARM::BI__builtin_arm_mve_vcmpcsq_n_u16:
2396case ARM::BI__builtin_arm_mve_vcmpcsq_n_u32:
2397case ARM::BI__builtin_arm_mve_vcmpcsq_n_u8: {
2398 llvm::Type * Param0;
2399 switch (BuiltinID) {
2400 case ARM::BI__builtin_arm_mve_vcmpcsq_n_u16:
2401 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2402 break;
2403 case ARM::BI__builtin_arm_mve_vcmpcsq_n_u32:
2404 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2405 break;
2406 case ARM::BI__builtin_arm_mve_vcmpcsq_n_u8:
2407 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2408 break;
2409 }
2410 Value *Val0 = EmitScalarExpr(E->getArg(0));
2411 Value *Val1 = EmitScalarExpr(E->getArg(1));
2412 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2413 Value *Val3 = Builder.CreateICmpUGE(Val0, Val2);
2414 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2415 return Builder.CreateIntCast(Val4, Int16Ty, false);
2416}
2417case ARM::BI__builtin_arm_mve_vcmphiq_n_u16:
2418case ARM::BI__builtin_arm_mve_vcmphiq_n_u32:
2419case ARM::BI__builtin_arm_mve_vcmphiq_n_u8: {
2420 llvm::Type * Param0;
2421 switch (BuiltinID) {
2422 case ARM::BI__builtin_arm_mve_vcmphiq_n_u16:
2423 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2424 break;
2425 case ARM::BI__builtin_arm_mve_vcmphiq_n_u32:
2426 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2427 break;
2428 case ARM::BI__builtin_arm_mve_vcmphiq_n_u8:
2429 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2430 break;
2431 }
2432 Value *Val0 = EmitScalarExpr(E->getArg(0));
2433 Value *Val1 = EmitScalarExpr(E->getArg(1));
2434 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2435 Value *Val3 = Builder.CreateICmpUGT(Val0, Val2);
2436 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val3});
2437 return Builder.CreateIntCast(Val4, Int16Ty, false);
2438}
2439case ARM::BI__builtin_arm_mve_vqdmullbq_n_s16:
2440case ARM::BI__builtin_arm_mve_vqdmullbq_n_s32:
2441case ARM::BI__builtin_arm_mve_vqdmulltq_n_s16:
2442case ARM::BI__builtin_arm_mve_vqdmulltq_n_s32: {
2443 uint32_t Param0;
2444 llvm::Type * Param1;
2445 llvm::Type * Param2;
2446 switch (BuiltinID) {
2447 case ARM::BI__builtin_arm_mve_vqdmullbq_n_s16:
2448 Param0 = 0;
2449 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2450 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
2451 break;
2452 case ARM::BI__builtin_arm_mve_vqdmullbq_n_s32:
2453 Param0 = 0;
2454 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
2455 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
2456 break;
2457 case ARM::BI__builtin_arm_mve_vqdmulltq_n_s16:
2458 Param0 = 1;
2459 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2460 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
2461 break;
2462 case ARM::BI__builtin_arm_mve_vqdmulltq_n_s32:
2463 Param0 = 1;
2464 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
2465 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
2466 break;
2467 }
2468 Value *Val0 = EmitScalarExpr(E->getArg(0));
2469 Value *Val1 = EmitScalarExpr(E->getArg(1));
2470 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2471 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
2472 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmull, {Param1, Param2}), {Val0, Val2, Val3});
2473}
2474case ARM::BI__builtin_arm_mve_vhaddq_n_s16:
2475case ARM::BI__builtin_arm_mve_vhaddq_n_s32:
2476case ARM::BI__builtin_arm_mve_vhaddq_n_s8:
2477case ARM::BI__builtin_arm_mve_vhaddq_n_u16:
2478case ARM::BI__builtin_arm_mve_vhaddq_n_u32:
2479case ARM::BI__builtin_arm_mve_vhaddq_n_u8:
2480case ARM::BI__builtin_arm_mve_vhsubq_n_s16:
2481case ARM::BI__builtin_arm_mve_vhsubq_n_s32:
2482case ARM::BI__builtin_arm_mve_vhsubq_n_s8:
2483case ARM::BI__builtin_arm_mve_vhsubq_n_u16:
2484case ARM::BI__builtin_arm_mve_vhsubq_n_u32:
2485case ARM::BI__builtin_arm_mve_vhsubq_n_u8: {
2486 uint32_t Param0;
2487 Intrinsic::ID Param1;
2488 llvm::Type * Param2;
2489 switch (BuiltinID) {
2490 case ARM::BI__builtin_arm_mve_vhaddq_n_s16:
2491 Param0 = 0;
2492 Param1 = Intrinsic::arm_mve_vhadd;
2493 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
2494 break;
2495 case ARM::BI__builtin_arm_mve_vhaddq_n_s32:
2496 Param0 = 0;
2497 Param1 = Intrinsic::arm_mve_vhadd;
2498 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
2499 break;
2500 case ARM::BI__builtin_arm_mve_vhaddq_n_s8:
2501 Param0 = 0;
2502 Param1 = Intrinsic::arm_mve_vhadd;
2503 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
2504 break;
2505 case ARM::BI__builtin_arm_mve_vhaddq_n_u16:
2506 Param0 = 1;
2507 Param1 = Intrinsic::arm_mve_vhadd;
2508 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
2509 break;
2510 case ARM::BI__builtin_arm_mve_vhaddq_n_u32:
2511 Param0 = 1;
2512 Param1 = Intrinsic::arm_mve_vhadd;
2513 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
2514 break;
2515 case ARM::BI__builtin_arm_mve_vhaddq_n_u8:
2516 Param0 = 1;
2517 Param1 = Intrinsic::arm_mve_vhadd;
2518 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
2519 break;
2520 case ARM::BI__builtin_arm_mve_vhsubq_n_s16:
2521 Param0 = 0;
2522 Param1 = Intrinsic::arm_mve_vhsub;
2523 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
2524 break;
2525 case ARM::BI__builtin_arm_mve_vhsubq_n_s32:
2526 Param0 = 0;
2527 Param1 = Intrinsic::arm_mve_vhsub;
2528 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
2529 break;
2530 case ARM::BI__builtin_arm_mve_vhsubq_n_s8:
2531 Param0 = 0;
2532 Param1 = Intrinsic::arm_mve_vhsub;
2533 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
2534 break;
2535 case ARM::BI__builtin_arm_mve_vhsubq_n_u16:
2536 Param0 = 1;
2537 Param1 = Intrinsic::arm_mve_vhsub;
2538 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
2539 break;
2540 case ARM::BI__builtin_arm_mve_vhsubq_n_u32:
2541 Param0 = 1;
2542 Param1 = Intrinsic::arm_mve_vhsub;
2543 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
2544 break;
2545 case ARM::BI__builtin_arm_mve_vhsubq_n_u8:
2546 Param0 = 1;
2547 Param1 = Intrinsic::arm_mve_vhsub;
2548 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
2549 break;
2550 }
2551 Value *Val0 = EmitScalarExpr(E->getArg(0));
2552 Value *Val1 = EmitScalarExpr(E->getArg(1));
2553 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2554 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
2555 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val2, Val3});
2556}
2557case ARM::BI__builtin_arm_mve_vaddq_n_s16:
2558case ARM::BI__builtin_arm_mve_vaddq_n_s32:
2559case ARM::BI__builtin_arm_mve_vaddq_n_s8:
2560case ARM::BI__builtin_arm_mve_vaddq_n_u16:
2561case ARM::BI__builtin_arm_mve_vaddq_n_u32:
2562case ARM::BI__builtin_arm_mve_vaddq_n_u8: {
2563 Value *Val0 = EmitScalarExpr(E->getArg(0));
2564 Value *Val1 = EmitScalarExpr(E->getArg(1));
2565 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2566 return Builder.CreateAdd(Val0, Val2);
2567}
2568case ARM::BI__builtin_arm_mve_vqaddq_n_s16:
2569case ARM::BI__builtin_arm_mve_vqaddq_n_s32:
2570case ARM::BI__builtin_arm_mve_vqaddq_n_s8:
2571case ARM::BI__builtin_arm_mve_vqaddq_n_u16:
2572case ARM::BI__builtin_arm_mve_vqaddq_n_u32:
2573case ARM::BI__builtin_arm_mve_vqaddq_n_u8:
2574case ARM::BI__builtin_arm_mve_vqdmulhq_n_s16:
2575case ARM::BI__builtin_arm_mve_vqdmulhq_n_s32:
2576case ARM::BI__builtin_arm_mve_vqdmulhq_n_s8:
2577case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s16:
2578case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s32:
2579case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s8:
2580case ARM::BI__builtin_arm_mve_vqsubq_n_s16:
2581case ARM::BI__builtin_arm_mve_vqsubq_n_s32:
2582case ARM::BI__builtin_arm_mve_vqsubq_n_s8:
2583case ARM::BI__builtin_arm_mve_vqsubq_n_u16:
2584case ARM::BI__builtin_arm_mve_vqsubq_n_u32:
2585case ARM::BI__builtin_arm_mve_vqsubq_n_u8: {
2586 Intrinsic::ID Param0;
2587 llvm::Type * Param1;
2588 switch (BuiltinID) {
2589 case ARM::BI__builtin_arm_mve_vqaddq_n_s16:
2590 Param0 = Intrinsic::sadd_sat;
2591 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2592 break;
2593 case ARM::BI__builtin_arm_mve_vqaddq_n_s32:
2594 Param0 = Intrinsic::sadd_sat;
2595 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2596 break;
2597 case ARM::BI__builtin_arm_mve_vqaddq_n_s8:
2598 Param0 = Intrinsic::sadd_sat;
2599 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2600 break;
2601 case ARM::BI__builtin_arm_mve_vqaddq_n_u16:
2602 Param0 = Intrinsic::uadd_sat;
2603 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2604 break;
2605 case ARM::BI__builtin_arm_mve_vqaddq_n_u32:
2606 Param0 = Intrinsic::uadd_sat;
2607 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2608 break;
2609 case ARM::BI__builtin_arm_mve_vqaddq_n_u8:
2610 Param0 = Intrinsic::uadd_sat;
2611 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2612 break;
2613 case ARM::BI__builtin_arm_mve_vqdmulhq_n_s16:
2614 Param0 = Intrinsic::arm_mve_vqdmulh;
2615 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2616 break;
2617 case ARM::BI__builtin_arm_mve_vqdmulhq_n_s32:
2618 Param0 = Intrinsic::arm_mve_vqdmulh;
2619 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2620 break;
2621 case ARM::BI__builtin_arm_mve_vqdmulhq_n_s8:
2622 Param0 = Intrinsic::arm_mve_vqdmulh;
2623 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2624 break;
2625 case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s16:
2626 Param0 = Intrinsic::arm_mve_vqrdmulh;
2627 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2628 break;
2629 case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s32:
2630 Param0 = Intrinsic::arm_mve_vqrdmulh;
2631 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2632 break;
2633 case ARM::BI__builtin_arm_mve_vqrdmulhq_n_s8:
2634 Param0 = Intrinsic::arm_mve_vqrdmulh;
2635 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2636 break;
2637 case ARM::BI__builtin_arm_mve_vqsubq_n_s16:
2638 Param0 = Intrinsic::ssub_sat;
2639 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2640 break;
2641 case ARM::BI__builtin_arm_mve_vqsubq_n_s32:
2642 Param0 = Intrinsic::ssub_sat;
2643 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2644 break;
2645 case ARM::BI__builtin_arm_mve_vqsubq_n_s8:
2646 Param0 = Intrinsic::ssub_sat;
2647 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2648 break;
2649 case ARM::BI__builtin_arm_mve_vqsubq_n_u16:
2650 Param0 = Intrinsic::usub_sat;
2651 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2652 break;
2653 case ARM::BI__builtin_arm_mve_vqsubq_n_u32:
2654 Param0 = Intrinsic::usub_sat;
2655 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2656 break;
2657 case ARM::BI__builtin_arm_mve_vqsubq_n_u8:
2658 Param0 = Intrinsic::usub_sat;
2659 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2660 break;
2661 }
2662 Value *Val0 = EmitScalarExpr(E->getArg(0));
2663 Value *Val1 = EmitScalarExpr(E->getArg(1));
2664 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2665 return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val2});
2666}
2667case ARM::BI__builtin_arm_mve_vaddq_n_f16:
2668case ARM::BI__builtin_arm_mve_vaddq_n_f32: {
2669 Value *Val0 = EmitScalarExpr(E->getArg(0));
2670 Value *Val1 = EmitScalarExpr(E->getArg(1));
2671 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2672 return Builder.CreateFAdd(Val0, Val2);
2673}
2674case ARM::BI__builtin_arm_mve_vmulq_n_f16:
2675case ARM::BI__builtin_arm_mve_vmulq_n_f32: {
2676 Value *Val0 = EmitScalarExpr(E->getArg(0));
2677 Value *Val1 = EmitScalarExpr(E->getArg(1));
2678 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2679 return Builder.CreateFMul(Val0, Val2);
2680}
2681case ARM::BI__builtin_arm_mve_vsubq_n_f16:
2682case ARM::BI__builtin_arm_mve_vsubq_n_f32: {
2683 Value *Val0 = EmitScalarExpr(E->getArg(0));
2684 Value *Val1 = EmitScalarExpr(E->getArg(1));
2685 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2686 return Builder.CreateFSub(Val0, Val2);
2687}
2688case ARM::BI__builtin_arm_mve_vmulq_n_s16:
2689case ARM::BI__builtin_arm_mve_vmulq_n_s32:
2690case ARM::BI__builtin_arm_mve_vmulq_n_s8:
2691case ARM::BI__builtin_arm_mve_vmulq_n_u16:
2692case ARM::BI__builtin_arm_mve_vmulq_n_u32:
2693case ARM::BI__builtin_arm_mve_vmulq_n_u8: {
2694 Value *Val0 = EmitScalarExpr(E->getArg(0));
2695 Value *Val1 = EmitScalarExpr(E->getArg(1));
2696 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2697 return Builder.CreateMul(Val0, Val2);
2698}
2699case ARM::BI__builtin_arm_mve_vsubq_n_s16:
2700case ARM::BI__builtin_arm_mve_vsubq_n_s32:
2701case ARM::BI__builtin_arm_mve_vsubq_n_s8:
2702case ARM::BI__builtin_arm_mve_vsubq_n_u16:
2703case ARM::BI__builtin_arm_mve_vsubq_n_u32:
2704case ARM::BI__builtin_arm_mve_vsubq_n_u8: {
2705 Value *Val0 = EmitScalarExpr(E->getArg(0));
2706 Value *Val1 = EmitScalarExpr(E->getArg(1));
2707 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
2708 return Builder.CreateSub(Val0, Val2);
2709}
2710case ARM::BI__builtin_arm_mve_vmaxnmavq_f16:
2711case ARM::BI__builtin_arm_mve_vmaxnmavq_f32:
2712case ARM::BI__builtin_arm_mve_vmaxnmvq_f16:
2713case ARM::BI__builtin_arm_mve_vmaxnmvq_f32:
2714case ARM::BI__builtin_arm_mve_vminnmavq_f16:
2715case ARM::BI__builtin_arm_mve_vminnmavq_f32:
2716case ARM::BI__builtin_arm_mve_vminnmvq_f16:
2717case ARM::BI__builtin_arm_mve_vminnmvq_f32: {
2718 Intrinsic::ID Param0;
2719 llvm::Type * Param1;
2720 llvm::Type * Param2;
2721 switch (BuiltinID) {
2722 case ARM::BI__builtin_arm_mve_vmaxnmavq_f16:
2723 Param0 = Intrinsic::arm_mve_maxnmav;
2724 Param1 = HalfTy;
2725 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
2726 break;
2727 case ARM::BI__builtin_arm_mve_vmaxnmavq_f32:
2728 Param0 = Intrinsic::arm_mve_maxnmav;
2729 Param1 = FloatTy;
2730 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
2731 break;
2732 case ARM::BI__builtin_arm_mve_vmaxnmvq_f16:
2733 Param0 = Intrinsic::arm_mve_maxnmv;
2734 Param1 = HalfTy;
2735 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
2736 break;
2737 case ARM::BI__builtin_arm_mve_vmaxnmvq_f32:
2738 Param0 = Intrinsic::arm_mve_maxnmv;
2739 Param1 = FloatTy;
2740 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
2741 break;
2742 case ARM::BI__builtin_arm_mve_vminnmavq_f16:
2743 Param0 = Intrinsic::arm_mve_minnmav;
2744 Param1 = HalfTy;
2745 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
2746 break;
2747 case ARM::BI__builtin_arm_mve_vminnmavq_f32:
2748 Param0 = Intrinsic::arm_mve_minnmav;
2749 Param1 = FloatTy;
2750 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
2751 break;
2752 case ARM::BI__builtin_arm_mve_vminnmvq_f16:
2753 Param0 = Intrinsic::arm_mve_minnmv;
2754 Param1 = HalfTy;
2755 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
2756 break;
2757 case ARM::BI__builtin_arm_mve_vminnmvq_f32:
2758 Param0 = Intrinsic::arm_mve_minnmv;
2759 Param1 = FloatTy;
2760 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
2761 break;
2762 }
2763 Value *Val0 = EmitScalarExpr(E->getArg(0));
2764 Value *Val1 = EmitScalarExpr(E->getArg(1));
2765 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1, Param2}), {Val0, Val1});
2766 return (Val2);
2767}
2768case ARM::BI__builtin_arm_mve_vddupq_n_u16:
2769case ARM::BI__builtin_arm_mve_vddupq_n_u32:
2770case ARM::BI__builtin_arm_mve_vddupq_n_u8:
2771case ARM::BI__builtin_arm_mve_vidupq_n_u16:
2772case ARM::BI__builtin_arm_mve_vidupq_n_u32:
2773case ARM::BI__builtin_arm_mve_vidupq_n_u8: {
2774 Intrinsic::ID Param0;
2775 llvm::Type * Param1;
2776 switch (BuiltinID) {
2777 case ARM::BI__builtin_arm_mve_vddupq_n_u16:
2778 Param0 = Intrinsic::arm_mve_vddup;
2779 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2780 break;
2781 case ARM::BI__builtin_arm_mve_vddupq_n_u32:
2782 Param0 = Intrinsic::arm_mve_vddup;
2783 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2784 break;
2785 case ARM::BI__builtin_arm_mve_vddupq_n_u8:
2786 Param0 = Intrinsic::arm_mve_vddup;
2787 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2788 break;
2789 case ARM::BI__builtin_arm_mve_vidupq_n_u16:
2790 Param0 = Intrinsic::arm_mve_vidup;
2791 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
2792 break;
2793 case ARM::BI__builtin_arm_mve_vidupq_n_u32:
2794 Param0 = Intrinsic::arm_mve_vidup;
2795 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
2796 break;
2797 case ARM::BI__builtin_arm_mve_vidupq_n_u8:
2798 Param0 = Intrinsic::arm_mve_vidup;
2799 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
2800 break;
2801 }
2802 Value *Val0 = EmitScalarExpr(E->getArg(0));
2803 Value *Val1 = EmitScalarExpr(E->getArg(1));
2804 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1});
2805 return Builder.CreateExtractValue(Val2, static_cast<unsigned>(0));
2806}
2807case ARM::BI__builtin_arm_mve_vmaxavq_s32:
2808case ARM::BI__builtin_arm_mve_vminavq_s32: {
2809 Intrinsic::ID Param0;
2810 switch (BuiltinID) {
2811 case ARM::BI__builtin_arm_mve_vmaxavq_s32:
2812 Param0 = Intrinsic::arm_mve_maxav;
2813 break;
2814 case ARM::BI__builtin_arm_mve_vminavq_s32:
2815 Param0 = Intrinsic::arm_mve_minav;
2816 break;
2817 }
2818 Value *Val0 = EmitScalarExpr(E->getArg(0));
2819 Value *Val1 = EmitScalarExpr(E->getArg(1));
2820 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1});
2821 return Builder.CreateIntCast(Val2, Int32Ty, false);
2822}
2823case ARM::BI__builtin_arm_mve_vcmpeqq_f16:
2824case ARM::BI__builtin_arm_mve_vcmpeqq_f32: {
2825 llvm::Type * Param0;
2826 switch (BuiltinID) {
2827 case ARM::BI__builtin_arm_mve_vcmpeqq_f16:
2828 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2829 break;
2830 case ARM::BI__builtin_arm_mve_vcmpeqq_f32:
2831 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2832 break;
2833 }
2834 Value *Val0 = EmitScalarExpr(E->getArg(0));
2835 Value *Val1 = EmitScalarExpr(E->getArg(1));
2836 Value *Val2 = Builder.CreateFCmpOEQ(Val0, Val1);
2837 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2838 return Builder.CreateIntCast(Val3, Int16Ty, false);
2839}
2840case ARM::BI__builtin_arm_mve_vcmpgeq_f16:
2841case ARM::BI__builtin_arm_mve_vcmpgeq_f32: {
2842 llvm::Type * Param0;
2843 switch (BuiltinID) {
2844 case ARM::BI__builtin_arm_mve_vcmpgeq_f16:
2845 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2846 break;
2847 case ARM::BI__builtin_arm_mve_vcmpgeq_f32:
2848 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2849 break;
2850 }
2851 Value *Val0 = EmitScalarExpr(E->getArg(0));
2852 Value *Val1 = EmitScalarExpr(E->getArg(1));
2853 Value *Val2 = Builder.CreateFCmpOGE(Val0, Val1);
2854 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2855 return Builder.CreateIntCast(Val3, Int16Ty, false);
2856}
2857case ARM::BI__builtin_arm_mve_vcmpgtq_f16:
2858case ARM::BI__builtin_arm_mve_vcmpgtq_f32: {
2859 llvm::Type * Param0;
2860 switch (BuiltinID) {
2861 case ARM::BI__builtin_arm_mve_vcmpgtq_f16:
2862 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2863 break;
2864 case ARM::BI__builtin_arm_mve_vcmpgtq_f32:
2865 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2866 break;
2867 }
2868 Value *Val0 = EmitScalarExpr(E->getArg(0));
2869 Value *Val1 = EmitScalarExpr(E->getArg(1));
2870 Value *Val2 = Builder.CreateFCmpOGT(Val0, Val1);
2871 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2872 return Builder.CreateIntCast(Val3, Int16Ty, false);
2873}
2874case ARM::BI__builtin_arm_mve_vcmpleq_f16:
2875case ARM::BI__builtin_arm_mve_vcmpleq_f32: {
2876 llvm::Type * Param0;
2877 switch (BuiltinID) {
2878 case ARM::BI__builtin_arm_mve_vcmpleq_f16:
2879 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2880 break;
2881 case ARM::BI__builtin_arm_mve_vcmpleq_f32:
2882 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2883 break;
2884 }
2885 Value *Val0 = EmitScalarExpr(E->getArg(0));
2886 Value *Val1 = EmitScalarExpr(E->getArg(1));
2887 Value *Val2 = Builder.CreateFCmpOLE(Val0, Val1);
2888 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2889 return Builder.CreateIntCast(Val3, Int16Ty, false);
2890}
2891case ARM::BI__builtin_arm_mve_vcmpltq_f16:
2892case ARM::BI__builtin_arm_mve_vcmpltq_f32: {
2893 llvm::Type * Param0;
2894 switch (BuiltinID) {
2895 case ARM::BI__builtin_arm_mve_vcmpltq_f16:
2896 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2897 break;
2898 case ARM::BI__builtin_arm_mve_vcmpltq_f32:
2899 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2900 break;
2901 }
2902 Value *Val0 = EmitScalarExpr(E->getArg(0));
2903 Value *Val1 = EmitScalarExpr(E->getArg(1));
2904 Value *Val2 = Builder.CreateFCmpOLT(Val0, Val1);
2905 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2906 return Builder.CreateIntCast(Val3, Int16Ty, false);
2907}
2908case ARM::BI__builtin_arm_mve_vcmpneq_f16:
2909case ARM::BI__builtin_arm_mve_vcmpneq_f32: {
2910 llvm::Type * Param0;
2911 switch (BuiltinID) {
2912 case ARM::BI__builtin_arm_mve_vcmpneq_f16:
2913 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2914 break;
2915 case ARM::BI__builtin_arm_mve_vcmpneq_f32:
2916 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2917 break;
2918 }
2919 Value *Val0 = EmitScalarExpr(E->getArg(0));
2920 Value *Val1 = EmitScalarExpr(E->getArg(1));
2921 Value *Val2 = Builder.CreateFCmpUNE(Val0, Val1);
2922 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2923 return Builder.CreateIntCast(Val3, Int16Ty, false);
2924}
2925case ARM::BI__builtin_arm_mve_vcmpeqq_s16:
2926case ARM::BI__builtin_arm_mve_vcmpeqq_s32:
2927case ARM::BI__builtin_arm_mve_vcmpeqq_s8:
2928case ARM::BI__builtin_arm_mve_vcmpeqq_u16:
2929case ARM::BI__builtin_arm_mve_vcmpeqq_u32:
2930case ARM::BI__builtin_arm_mve_vcmpeqq_u8: {
2931 llvm::Type * Param0;
2932 switch (BuiltinID) {
2933 case ARM::BI__builtin_arm_mve_vcmpeqq_s16:
2934 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2935 break;
2936 case ARM::BI__builtin_arm_mve_vcmpeqq_s32:
2937 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2938 break;
2939 case ARM::BI__builtin_arm_mve_vcmpeqq_s8:
2940 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2941 break;
2942 case ARM::BI__builtin_arm_mve_vcmpeqq_u16:
2943 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2944 break;
2945 case ARM::BI__builtin_arm_mve_vcmpeqq_u32:
2946 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2947 break;
2948 case ARM::BI__builtin_arm_mve_vcmpeqq_u8:
2949 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2950 break;
2951 }
2952 Value *Val0 = EmitScalarExpr(E->getArg(0));
2953 Value *Val1 = EmitScalarExpr(E->getArg(1));
2954 Value *Val2 = Builder.CreateICmpEQ(Val0, Val1);
2955 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2956 return Builder.CreateIntCast(Val3, Int16Ty, false);
2957}
2958case ARM::BI__builtin_arm_mve_vcmpneq_s16:
2959case ARM::BI__builtin_arm_mve_vcmpneq_s32:
2960case ARM::BI__builtin_arm_mve_vcmpneq_s8:
2961case ARM::BI__builtin_arm_mve_vcmpneq_u16:
2962case ARM::BI__builtin_arm_mve_vcmpneq_u32:
2963case ARM::BI__builtin_arm_mve_vcmpneq_u8: {
2964 llvm::Type * Param0;
2965 switch (BuiltinID) {
2966 case ARM::BI__builtin_arm_mve_vcmpneq_s16:
2967 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2968 break;
2969 case ARM::BI__builtin_arm_mve_vcmpneq_s32:
2970 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2971 break;
2972 case ARM::BI__builtin_arm_mve_vcmpneq_s8:
2973 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2974 break;
2975 case ARM::BI__builtin_arm_mve_vcmpneq_u16:
2976 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2977 break;
2978 case ARM::BI__builtin_arm_mve_vcmpneq_u32:
2979 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
2980 break;
2981 case ARM::BI__builtin_arm_mve_vcmpneq_u8:
2982 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
2983 break;
2984 }
2985 Value *Val0 = EmitScalarExpr(E->getArg(0));
2986 Value *Val1 = EmitScalarExpr(E->getArg(1));
2987 Value *Val2 = Builder.CreateICmpNE(Val0, Val1);
2988 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
2989 return Builder.CreateIntCast(Val3, Int16Ty, false);
2990}
2991case ARM::BI__builtin_arm_mve_vcmpgeq_s16:
2992case ARM::BI__builtin_arm_mve_vcmpgeq_s32:
2993case ARM::BI__builtin_arm_mve_vcmpgeq_s8: {
2994 llvm::Type * Param0;
2995 switch (BuiltinID) {
2996 case ARM::BI__builtin_arm_mve_vcmpgeq_s16:
2997 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
2998 break;
2999 case ARM::BI__builtin_arm_mve_vcmpgeq_s32:
3000 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3001 break;
3002 case ARM::BI__builtin_arm_mve_vcmpgeq_s8:
3003 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3004 break;
3005 }
3006 Value *Val0 = EmitScalarExpr(E->getArg(0));
3007 Value *Val1 = EmitScalarExpr(E->getArg(1));
3008 Value *Val2 = Builder.CreateICmpSGE(Val0, Val1);
3009 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
3010 return Builder.CreateIntCast(Val3, Int16Ty, false);
3011}
3012case ARM::BI__builtin_arm_mve_vmaxq_s16:
3013case ARM::BI__builtin_arm_mve_vmaxq_s32:
3014case ARM::BI__builtin_arm_mve_vmaxq_s8: {
3015 Value *Val0 = EmitScalarExpr(E->getArg(0));
3016 Value *Val1 = EmitScalarExpr(E->getArg(1));
3017 Value *Val2 = Builder.CreateICmpSGE(Val0, Val1);
3018 return Builder.CreateSelect(Val2, Val0, Val1);
3019}
3020case ARM::BI__builtin_arm_mve_vcmpgtq_s16:
3021case ARM::BI__builtin_arm_mve_vcmpgtq_s32:
3022case ARM::BI__builtin_arm_mve_vcmpgtq_s8: {
3023 llvm::Type * Param0;
3024 switch (BuiltinID) {
3025 case ARM::BI__builtin_arm_mve_vcmpgtq_s16:
3026 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3027 break;
3028 case ARM::BI__builtin_arm_mve_vcmpgtq_s32:
3029 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3030 break;
3031 case ARM::BI__builtin_arm_mve_vcmpgtq_s8:
3032 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3033 break;
3034 }
3035 Value *Val0 = EmitScalarExpr(E->getArg(0));
3036 Value *Val1 = EmitScalarExpr(E->getArg(1));
3037 Value *Val2 = Builder.CreateICmpSGT(Val0, Val1);
3038 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
3039 return Builder.CreateIntCast(Val3, Int16Ty, false);
3040}
3041case ARM::BI__builtin_arm_mve_vcmpleq_s16:
3042case ARM::BI__builtin_arm_mve_vcmpleq_s32:
3043case ARM::BI__builtin_arm_mve_vcmpleq_s8: {
3044 llvm::Type * Param0;
3045 switch (BuiltinID) {
3046 case ARM::BI__builtin_arm_mve_vcmpleq_s16:
3047 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3048 break;
3049 case ARM::BI__builtin_arm_mve_vcmpleq_s32:
3050 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3051 break;
3052 case ARM::BI__builtin_arm_mve_vcmpleq_s8:
3053 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3054 break;
3055 }
3056 Value *Val0 = EmitScalarExpr(E->getArg(0));
3057 Value *Val1 = EmitScalarExpr(E->getArg(1));
3058 Value *Val2 = Builder.CreateICmpSLE(Val0, Val1);
3059 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
3060 return Builder.CreateIntCast(Val3, Int16Ty, false);
3061}
3062case ARM::BI__builtin_arm_mve_vminq_s16:
3063case ARM::BI__builtin_arm_mve_vminq_s32:
3064case ARM::BI__builtin_arm_mve_vminq_s8: {
3065 Value *Val0 = EmitScalarExpr(E->getArg(0));
3066 Value *Val1 = EmitScalarExpr(E->getArg(1));
3067 Value *Val2 = Builder.CreateICmpSLE(Val0, Val1);
3068 return Builder.CreateSelect(Val2, Val0, Val1);
3069}
3070case ARM::BI__builtin_arm_mve_vcmpltq_s16:
3071case ARM::BI__builtin_arm_mve_vcmpltq_s32:
3072case ARM::BI__builtin_arm_mve_vcmpltq_s8: {
3073 llvm::Type * Param0;
3074 switch (BuiltinID) {
3075 case ARM::BI__builtin_arm_mve_vcmpltq_s16:
3076 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3077 break;
3078 case ARM::BI__builtin_arm_mve_vcmpltq_s32:
3079 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3080 break;
3081 case ARM::BI__builtin_arm_mve_vcmpltq_s8:
3082 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3083 break;
3084 }
3085 Value *Val0 = EmitScalarExpr(E->getArg(0));
3086 Value *Val1 = EmitScalarExpr(E->getArg(1));
3087 Value *Val2 = Builder.CreateICmpSLT(Val0, Val1);
3088 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
3089 return Builder.CreateIntCast(Val3, Int16Ty, false);
3090}
3091case ARM::BI__builtin_arm_mve_vcmpcsq_u16:
3092case ARM::BI__builtin_arm_mve_vcmpcsq_u32:
3093case ARM::BI__builtin_arm_mve_vcmpcsq_u8: {
3094 llvm::Type * Param0;
3095 switch (BuiltinID) {
3096 case ARM::BI__builtin_arm_mve_vcmpcsq_u16:
3097 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3098 break;
3099 case ARM::BI__builtin_arm_mve_vcmpcsq_u32:
3100 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3101 break;
3102 case ARM::BI__builtin_arm_mve_vcmpcsq_u8:
3103 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3104 break;
3105 }
3106 Value *Val0 = EmitScalarExpr(E->getArg(0));
3107 Value *Val1 = EmitScalarExpr(E->getArg(1));
3108 Value *Val2 = Builder.CreateICmpUGE(Val0, Val1);
3109 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
3110 return Builder.CreateIntCast(Val3, Int16Ty, false);
3111}
3112case ARM::BI__builtin_arm_mve_vmaxq_u16:
3113case ARM::BI__builtin_arm_mve_vmaxq_u32:
3114case ARM::BI__builtin_arm_mve_vmaxq_u8: {
3115 Value *Val0 = EmitScalarExpr(E->getArg(0));
3116 Value *Val1 = EmitScalarExpr(E->getArg(1));
3117 Value *Val2 = Builder.CreateICmpUGE(Val0, Val1);
3118 return Builder.CreateSelect(Val2, Val0, Val1);
3119}
3120case ARM::BI__builtin_arm_mve_vcmphiq_u16:
3121case ARM::BI__builtin_arm_mve_vcmphiq_u32:
3122case ARM::BI__builtin_arm_mve_vcmphiq_u8: {
3123 llvm::Type * Param0;
3124 switch (BuiltinID) {
3125 case ARM::BI__builtin_arm_mve_vcmphiq_u16:
3126 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3127 break;
3128 case ARM::BI__builtin_arm_mve_vcmphiq_u32:
3129 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3130 break;
3131 case ARM::BI__builtin_arm_mve_vcmphiq_u8:
3132 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3133 break;
3134 }
3135 Value *Val0 = EmitScalarExpr(E->getArg(0));
3136 Value *Val1 = EmitScalarExpr(E->getArg(1));
3137 Value *Val2 = Builder.CreateICmpUGT(Val0, Val1);
3138 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val2});
3139 return Builder.CreateIntCast(Val3, Int16Ty, false);
3140}
3141case ARM::BI__builtin_arm_mve_vminq_u16:
3142case ARM::BI__builtin_arm_mve_vminq_u32:
3143case ARM::BI__builtin_arm_mve_vminq_u8: {
3144 Value *Val0 = EmitScalarExpr(E->getArg(0));
3145 Value *Val1 = EmitScalarExpr(E->getArg(1));
3146 Value *Val2 = Builder.CreateICmpULE(Val0, Val1);
3147 return Builder.CreateSelect(Val2, Val0, Val1);
3148}
3149case ARM::BI__builtin_arm_mve_vbicq_n_s32:
3150case ARM::BI__builtin_arm_mve_vbicq_n_u32: {
3151 bool Param0;
3152 switch (BuiltinID) {
3153 case ARM::BI__builtin_arm_mve_vbicq_n_s32:
3154 Param0 = true;
3155 break;
3156 case ARM::BI__builtin_arm_mve_vbicq_n_u32:
3157 Param0 = false;
3158 break;
3159 }
3160 Value *Val0 = EmitScalarExpr(E->getArg(0));
3161 Value *Val1 = EmitScalarExpr(E->getArg(1));
3162 Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, Param0);
3163 Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
3164 Value *Val4 = Builder.CreateNot(Val3);
3165 return Builder.CreateAnd(Val0, Val4);
3166}
3167case ARM::BI__builtin_arm_mve_vorrq_n_s32:
3168case ARM::BI__builtin_arm_mve_vorrq_n_u32: {
3169 bool Param0;
3170 switch (BuiltinID) {
3171 case ARM::BI__builtin_arm_mve_vorrq_n_s32:
3172 Param0 = true;
3173 break;
3174 case ARM::BI__builtin_arm_mve_vorrq_n_u32:
3175 Param0 = false;
3176 break;
3177 }
3178 Value *Val0 = EmitScalarExpr(E->getArg(0));
3179 Value *Val1 = EmitScalarExpr(E->getArg(1));
3180 Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, Param0);
3181 Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
3182 return Builder.CreateOr(Val0, Val3);
3183}
3184case ARM::BI__builtin_arm_mve_vbicq_n_s16:
3185case ARM::BI__builtin_arm_mve_vbicq_n_u16: {
3186 bool Param0;
3187 switch (BuiltinID) {
3188 case ARM::BI__builtin_arm_mve_vbicq_n_s16:
3189 Param0 = true;
3190 break;
3191 case ARM::BI__builtin_arm_mve_vbicq_n_u16:
3192 Param0 = false;
3193 break;
3194 }
3195 Value *Val0 = EmitScalarExpr(E->getArg(0));
3196 Value *Val1 = EmitScalarExpr(E->getArg(1));
3197 Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, false);
3198 Value *Val3 = Builder.CreateIntCast(Val2, Int16Ty, Param0);
3199 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
3200 Value *Val5 = Builder.CreateNot(Val4);
3201 return Builder.CreateAnd(Val0, Val5);
3202}
3203case ARM::BI__builtin_arm_mve_vorrq_n_s16:
3204case ARM::BI__builtin_arm_mve_vorrq_n_u16: {
3205 bool Param0;
3206 switch (BuiltinID) {
3207 case ARM::BI__builtin_arm_mve_vorrq_n_s16:
3208 Param0 = true;
3209 break;
3210 case ARM::BI__builtin_arm_mve_vorrq_n_u16:
3211 Param0 = false;
3212 break;
3213 }
3214 Value *Val0 = EmitScalarExpr(E->getArg(0));
3215 Value *Val1 = EmitScalarExpr(E->getArg(1));
3216 Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, false);
3217 Value *Val3 = Builder.CreateIntCast(Val2, Int16Ty, Param0);
3218 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
3219 return Builder.CreateOr(Val0, Val4);
3220}
3221case ARM::BI__builtin_arm_mve_vshlq_n_s16:
3222case ARM::BI__builtin_arm_mve_vshlq_n_s32:
3223case ARM::BI__builtin_arm_mve_vshlq_n_s8:
3224case ARM::BI__builtin_arm_mve_vshlq_n_u16:
3225case ARM::BI__builtin_arm_mve_vshlq_n_u32:
3226case ARM::BI__builtin_arm_mve_vshlq_n_u8: {
3227 llvm::Type * Param0;
3228 bool Param1;
3229 switch (BuiltinID) {
3230 case ARM::BI__builtin_arm_mve_vshlq_n_s16:
3231 Param0 = Int16Ty;
3232 Param1 = true;
3233 break;
3234 case ARM::BI__builtin_arm_mve_vshlq_n_s32:
3235 Param0 = Int32Ty;
3236 Param1 = true;
3237 break;
3238 case ARM::BI__builtin_arm_mve_vshlq_n_s8:
3239 Param0 = Int8Ty;
3240 Param1 = true;
3241 break;
3242 case ARM::BI__builtin_arm_mve_vshlq_n_u16:
3243 Param0 = Int16Ty;
3244 Param1 = false;
3245 break;
3246 case ARM::BI__builtin_arm_mve_vshlq_n_u32:
3247 Param0 = Int32Ty;
3248 Param1 = false;
3249 break;
3250 case ARM::BI__builtin_arm_mve_vshlq_n_u8:
3251 Param0 = Int8Ty;
3252 Param1 = false;
3253 break;
3254 }
3255 Value *Val0 = EmitScalarExpr(E->getArg(0));
3256 Value *Val1 = EmitScalarExpr(E->getArg(1));
3257 Value *Val2 = Builder.CreateIntCast(Val1, Param0, Param1);
3258 Value *Val3 = ARMMVEVectorSplat(Builder, Val2);
3259 return Builder.CreateShl(Val0, Val3);
3260}
3261case ARM::BI__builtin_arm_mve_vmlasq_n_s16:
3262case ARM::BI__builtin_arm_mve_vmlasq_n_s32:
3263case ARM::BI__builtin_arm_mve_vmlasq_n_s8:
3264case ARM::BI__builtin_arm_mve_vmlasq_n_u16:
3265case ARM::BI__builtin_arm_mve_vmlasq_n_u32:
3266case ARM::BI__builtin_arm_mve_vmlasq_n_u8: {
3267 Value *Val0 = EmitScalarExpr(E->getArg(0));
3268 Value *Val1 = EmitScalarExpr(E->getArg(1));
3269 Value *Val2 = Builder.CreateMul(Val0, Val1);
3270 Value *Val3 = EmitScalarExpr(E->getArg(2));
3271 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
3272 return Builder.CreateAdd(Val2, Val4);
3273}
3274case ARM::BI__builtin_arm_mve_vbicq_s16:
3275case ARM::BI__builtin_arm_mve_vbicq_s32:
3276case ARM::BI__builtin_arm_mve_vbicq_s8:
3277case ARM::BI__builtin_arm_mve_vbicq_u16:
3278case ARM::BI__builtin_arm_mve_vbicq_u32:
3279case ARM::BI__builtin_arm_mve_vbicq_u8: {
3280 Value *Val0 = EmitScalarExpr(E->getArg(0));
3281 Value *Val1 = EmitScalarExpr(E->getArg(1));
3282 Value *Val2 = Builder.CreateNot(Val1);
3283 return Builder.CreateAnd(Val0, Val2);
3284}
3285case ARM::BI__builtin_arm_mve_vornq_s16:
3286case ARM::BI__builtin_arm_mve_vornq_s32:
3287case ARM::BI__builtin_arm_mve_vornq_s8:
3288case ARM::BI__builtin_arm_mve_vornq_u16:
3289case ARM::BI__builtin_arm_mve_vornq_u32:
3290case ARM::BI__builtin_arm_mve_vornq_u8: {
3291 Value *Val0 = EmitScalarExpr(E->getArg(0));
3292 Value *Val1 = EmitScalarExpr(E->getArg(1));
3293 Value *Val2 = Builder.CreateNot(Val1);
3294 return Builder.CreateOr(Val0, Val2);
3295}
3296case ARM::BI__builtin_arm_mve_vadcq_m_s32:
3297case ARM::BI__builtin_arm_mve_vadcq_m_u32:
3298case ARM::BI__builtin_arm_mve_vsbcq_m_s32:
3299case ARM::BI__builtin_arm_mve_vsbcq_m_u32: {
3300 Intrinsic::ID Param0;
3301 switch (BuiltinID) {
3302 case ARM::BI__builtin_arm_mve_vadcq_m_s32:
3303 Param0 = Intrinsic::arm_mve_vadc_predicated;
3304 break;
3305 case ARM::BI__builtin_arm_mve_vadcq_m_u32:
3306 Param0 = Intrinsic::arm_mve_vadc_predicated;
3307 break;
3308 case ARM::BI__builtin_arm_mve_vsbcq_m_s32:
3309 Param0 = Intrinsic::arm_mve_vsbc_predicated;
3310 break;
3311 case ARM::BI__builtin_arm_mve_vsbcq_m_u32:
3312 Param0 = Intrinsic::arm_mve_vsbc_predicated;
3313 break;
3314 }
3315 Value *Val0 = EmitScalarExpr(E->getArg(0));
3316 Value *Val1 = EmitScalarExpr(E->getArg(1));
3317 Value *Val2 = EmitScalarExpr(E->getArg(2));
3318 Address Val3 = EmitPointerWithAlignment(E->getArg(3));
3319 Value *Val4 = Builder.CreateLoad(Val3);
3320 Value *Val5 = llvm::ConstantInt::get(Int32Ty, 29);
3321 Value *Val6 = Builder.CreateShl(Val4, Val5);
3322 Value *Val7 = EmitScalarExpr(E->getArg(4));
3323 Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
3324 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val8});
3325 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val6, Val9});
3326 Value *Val11 = llvm::ConstantInt::get(Int32Ty, 1);
3327 Value *Val12 = Builder.CreateExtractValue(Val10, static_cast<unsigned>(1));
3328 Value *Val13 = llvm::ConstantInt::get(Int32Ty, 29);
3329 Value *Val14 = Builder.CreateLShr(Val12, Val13);
3330 Value *Val15 = Builder.CreateAnd(Val11, Val14);
3331 Builder.CreateStore(Val15, Val3);
3332 return Builder.CreateExtractValue(Val10, static_cast<unsigned>(0));
3333}
3334case ARM::BI__builtin_arm_mve_vdwdupq_n_u16:
3335case ARM::BI__builtin_arm_mve_vdwdupq_n_u32:
3336case ARM::BI__builtin_arm_mve_vdwdupq_n_u8:
3337case ARM::BI__builtin_arm_mve_viwdupq_n_u16:
3338case ARM::BI__builtin_arm_mve_viwdupq_n_u32:
3339case ARM::BI__builtin_arm_mve_viwdupq_n_u8: {
3340 Intrinsic::ID Param0;
3341 llvm::Type * Param1;
3342 switch (BuiltinID) {
3343 case ARM::BI__builtin_arm_mve_vdwdupq_n_u16:
3344 Param0 = Intrinsic::arm_mve_vdwdup;
3345 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
3346 break;
3347 case ARM::BI__builtin_arm_mve_vdwdupq_n_u32:
3348 Param0 = Intrinsic::arm_mve_vdwdup;
3349 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3350 break;
3351 case ARM::BI__builtin_arm_mve_vdwdupq_n_u8:
3352 Param0 = Intrinsic::arm_mve_vdwdup;
3353 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
3354 break;
3355 case ARM::BI__builtin_arm_mve_viwdupq_n_u16:
3356 Param0 = Intrinsic::arm_mve_viwdup;
3357 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
3358 break;
3359 case ARM::BI__builtin_arm_mve_viwdupq_n_u32:
3360 Param0 = Intrinsic::arm_mve_viwdup;
3361 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3362 break;
3363 case ARM::BI__builtin_arm_mve_viwdupq_n_u8:
3364 Param0 = Intrinsic::arm_mve_viwdup;
3365 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
3366 break;
3367 }
3368 Value *Val0 = EmitScalarExpr(E->getArg(0));
3369 Value *Val1 = EmitScalarExpr(E->getArg(1));
3370 Value *Val2 = EmitScalarExpr(E->getArg(2));
3371 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1, Val2});
3372 return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
3373}
3374case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f16:
3375case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f32:
3376case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f16:
3377case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f32:
3378case ARM::BI__builtin_arm_mve_vminnmavq_p_f16:
3379case ARM::BI__builtin_arm_mve_vminnmavq_p_f32:
3380case ARM::BI__builtin_arm_mve_vminnmvq_p_f16:
3381case ARM::BI__builtin_arm_mve_vminnmvq_p_f32: {
3382 llvm::Type * Param0;
3383 Intrinsic::ID Param1;
3384 llvm::Type * Param2;
3385 llvm::Type * Param3;
3386 switch (BuiltinID) {
3387 case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f16:
3388 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3389 Param1 = Intrinsic::arm_mve_maxnmav_predicated;
3390 Param2 = HalfTy;
3391 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
3392 break;
3393 case ARM::BI__builtin_arm_mve_vmaxnmavq_p_f32:
3394 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3395 Param1 = Intrinsic::arm_mve_maxnmav_predicated;
3396 Param2 = FloatTy;
3397 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
3398 break;
3399 case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f16:
3400 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3401 Param1 = Intrinsic::arm_mve_maxnmv_predicated;
3402 Param2 = HalfTy;
3403 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
3404 break;
3405 case ARM::BI__builtin_arm_mve_vmaxnmvq_p_f32:
3406 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3407 Param1 = Intrinsic::arm_mve_maxnmv_predicated;
3408 Param2 = FloatTy;
3409 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
3410 break;
3411 case ARM::BI__builtin_arm_mve_vminnmavq_p_f16:
3412 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3413 Param1 = Intrinsic::arm_mve_minnmav_predicated;
3414 Param2 = HalfTy;
3415 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
3416 break;
3417 case ARM::BI__builtin_arm_mve_vminnmavq_p_f32:
3418 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3419 Param1 = Intrinsic::arm_mve_minnmav_predicated;
3420 Param2 = FloatTy;
3421 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
3422 break;
3423 case ARM::BI__builtin_arm_mve_vminnmvq_p_f16:
3424 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3425 Param1 = Intrinsic::arm_mve_minnmv_predicated;
3426 Param2 = HalfTy;
3427 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
3428 break;
3429 case ARM::BI__builtin_arm_mve_vminnmvq_p_f32:
3430 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3431 Param1 = Intrinsic::arm_mve_minnmv_predicated;
3432 Param2 = FloatTy;
3433 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
3434 break;
3435 }
3436 Value *Val0 = EmitScalarExpr(E->getArg(0));
3437 Value *Val1 = EmitScalarExpr(E->getArg(1));
3438 Value *Val2 = EmitScalarExpr(E->getArg(2));
3439 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
3440 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val3});
3441 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param3, Param0}), {Val0, Val1, Val4});
3442 return (Val5);
3443}
3444case ARM::BI__builtin_arm_mve_vmaxaq_m_s16:
3445case ARM::BI__builtin_arm_mve_vmaxaq_m_s32:
3446case ARM::BI__builtin_arm_mve_vmaxaq_m_s8:
3447case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f16:
3448case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f32:
3449case ARM::BI__builtin_arm_mve_vminaq_m_s16:
3450case ARM::BI__builtin_arm_mve_vminaq_m_s32:
3451case ARM::BI__builtin_arm_mve_vminaq_m_s8:
3452case ARM::BI__builtin_arm_mve_vminnmaq_m_f16:
3453case ARM::BI__builtin_arm_mve_vminnmaq_m_f32: {
3454 llvm::Type * Param0;
3455 Intrinsic::ID Param1;
3456 llvm::Type * Param2;
3457 switch (BuiltinID) {
3458 case ARM::BI__builtin_arm_mve_vmaxaq_m_s16:
3459 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3460 Param1 = Intrinsic::arm_mve_vmaxa_predicated;
3461 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3462 break;
3463 case ARM::BI__builtin_arm_mve_vmaxaq_m_s32:
3464 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3465 Param1 = Intrinsic::arm_mve_vmaxa_predicated;
3466 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3467 break;
3468 case ARM::BI__builtin_arm_mve_vmaxaq_m_s8:
3469 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3470 Param1 = Intrinsic::arm_mve_vmaxa_predicated;
3471 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3472 break;
3473 case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f16:
3474 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3475 Param1 = Intrinsic::arm_mve_vmaxnma_predicated;
3476 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
3477 break;
3478 case ARM::BI__builtin_arm_mve_vmaxnmaq_m_f32:
3479 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3480 Param1 = Intrinsic::arm_mve_vmaxnma_predicated;
3481 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
3482 break;
3483 case ARM::BI__builtin_arm_mve_vminaq_m_s16:
3484 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3485 Param1 = Intrinsic::arm_mve_vmina_predicated;
3486 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3487 break;
3488 case ARM::BI__builtin_arm_mve_vminaq_m_s32:
3489 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3490 Param1 = Intrinsic::arm_mve_vmina_predicated;
3491 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3492 break;
3493 case ARM::BI__builtin_arm_mve_vminaq_m_s8:
3494 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3495 Param1 = Intrinsic::arm_mve_vmina_predicated;
3496 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3497 break;
3498 case ARM::BI__builtin_arm_mve_vminnmaq_m_f16:
3499 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3500 Param1 = Intrinsic::arm_mve_vminnma_predicated;
3501 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
3502 break;
3503 case ARM::BI__builtin_arm_mve_vminnmaq_m_f32:
3504 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3505 Param1 = Intrinsic::arm_mve_vminnma_predicated;
3506 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
3507 break;
3508 }
3509 Value *Val0 = EmitScalarExpr(E->getArg(0));
3510 Value *Val1 = EmitScalarExpr(E->getArg(1));
3511 Value *Val2 = EmitScalarExpr(E->getArg(2));
3512 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
3513 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val3});
3514 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val4});
3515}
3516case ARM::BI__builtin_arm_mve_vmaxavq_p_s32:
3517case ARM::BI__builtin_arm_mve_vminavq_p_s32: {
3518 Intrinsic::ID Param0;
3519 switch (BuiltinID) {
3520 case ARM::BI__builtin_arm_mve_vmaxavq_p_s32:
3521 Param0 = Intrinsic::arm_mve_maxav_predicated;
3522 break;
3523 case ARM::BI__builtin_arm_mve_vminavq_p_s32:
3524 Param0 = Intrinsic::arm_mve_minav_predicated;
3525 break;
3526 }
3527 Value *Val0 = EmitScalarExpr(E->getArg(0));
3528 Value *Val1 = EmitScalarExpr(E->getArg(1));
3529 Value *Val2 = EmitScalarExpr(E->getArg(2));
3530 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
3531 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
3532 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val4});
3533 return Builder.CreateIntCast(Val5, Int32Ty, false);
3534}
3535case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
3536case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
3537case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
3538case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
3539case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32: {
3540 llvm::Type * Param0;
3541 llvm::Type * Param1;
3542 switch (BuiltinID) {
3543 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_s64:
3544 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
3545 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
3546 break;
3547 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_z_u64:
3548 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
3549 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
3550 break;
3551 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_f32:
3552 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
3553 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3554 break;
3555 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_s32:
3556 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
3557 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3558 break;
3559 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_z_u32:
3560 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
3561 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3562 break;
3563 }
3564 Value *Val0 = EmitScalarExpr(E->getArg(0));
3565 Value *Val1 = EmitScalarExpr(E->getArg(1));
3566 Value *Val2 = EmitScalarExpr(E->getArg(2));
3567 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
3568 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
3569 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val4});
3570}
3571case ARM::BI__builtin_arm_mve_vmlaq_m_n_s16:
3572case ARM::BI__builtin_arm_mve_vmlaq_m_n_s8:
3573case ARM::BI__builtin_arm_mve_vmlaq_m_n_u16:
3574case ARM::BI__builtin_arm_mve_vmlaq_m_n_u8:
3575case ARM::BI__builtin_arm_mve_vmlasq_m_n_s16:
3576case ARM::BI__builtin_arm_mve_vmlasq_m_n_s8:
3577case ARM::BI__builtin_arm_mve_vmlasq_m_n_u16:
3578case ARM::BI__builtin_arm_mve_vmlasq_m_n_u8:
3579case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s16:
3580case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s8:
3581case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s16:
3582case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s8:
3583case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s16:
3584case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s8:
3585case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s16:
3586case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s8: {
3587 llvm::Type * Param0;
3588 Intrinsic::ID Param1;
3589 llvm::Type * Param2;
3590 switch (BuiltinID) {
3591 case ARM::BI__builtin_arm_mve_vmlaq_m_n_s16:
3592 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3593 Param1 = Intrinsic::arm_mve_vmla_n_predicated;
3594 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3595 break;
3596 case ARM::BI__builtin_arm_mve_vmlaq_m_n_s8:
3597 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3598 Param1 = Intrinsic::arm_mve_vmla_n_predicated;
3599 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3600 break;
3601 case ARM::BI__builtin_arm_mve_vmlaq_m_n_u16:
3602 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3603 Param1 = Intrinsic::arm_mve_vmla_n_predicated;
3604 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3605 break;
3606 case ARM::BI__builtin_arm_mve_vmlaq_m_n_u8:
3607 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3608 Param1 = Intrinsic::arm_mve_vmla_n_predicated;
3609 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3610 break;
3611 case ARM::BI__builtin_arm_mve_vmlasq_m_n_s16:
3612 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3613 Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
3614 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3615 break;
3616 case ARM::BI__builtin_arm_mve_vmlasq_m_n_s8:
3617 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3618 Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
3619 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3620 break;
3621 case ARM::BI__builtin_arm_mve_vmlasq_m_n_u16:
3622 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3623 Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
3624 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3625 break;
3626 case ARM::BI__builtin_arm_mve_vmlasq_m_n_u8:
3627 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3628 Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
3629 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3630 break;
3631 case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s16:
3632 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3633 Param1 = Intrinsic::arm_mve_vqdmlah_predicated;
3634 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3635 break;
3636 case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s8:
3637 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3638 Param1 = Intrinsic::arm_mve_vqdmlah_predicated;
3639 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3640 break;
3641 case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s16:
3642 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3643 Param1 = Intrinsic::arm_mve_vqdmlash_predicated;
3644 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3645 break;
3646 case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s8:
3647 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3648 Param1 = Intrinsic::arm_mve_vqdmlash_predicated;
3649 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3650 break;
3651 case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s16:
3652 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3653 Param1 = Intrinsic::arm_mve_vqrdmlah_predicated;
3654 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3655 break;
3656 case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s8:
3657 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3658 Param1 = Intrinsic::arm_mve_vqrdmlah_predicated;
3659 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3660 break;
3661 case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s16:
3662 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3663 Param1 = Intrinsic::arm_mve_vqrdmlash_predicated;
3664 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3665 break;
3666 case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s8:
3667 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3668 Param1 = Intrinsic::arm_mve_vqrdmlash_predicated;
3669 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3670 break;
3671 }
3672 Value *Val0 = EmitScalarExpr(E->getArg(0));
3673 Value *Val1 = EmitScalarExpr(E->getArg(1));
3674 Value *Val2 = EmitScalarExpr(E->getArg(2));
3675 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
3676 Value *Val4 = EmitScalarExpr(E->getArg(3));
3677 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
3678 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
3679 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val3, Val6});
3680}
3681case ARM::BI__builtin_arm_mve_vqdmlahq_n_s16:
3682case ARM::BI__builtin_arm_mve_vqdmlahq_n_s8:
3683case ARM::BI__builtin_arm_mve_vqdmlashq_n_s16:
3684case ARM::BI__builtin_arm_mve_vqdmlashq_n_s8:
3685case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s16:
3686case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s8:
3687case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s16:
3688case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s8: {
3689 Intrinsic::ID Param0;
3690 llvm::Type * Param1;
3691 switch (BuiltinID) {
3692 case ARM::BI__builtin_arm_mve_vqdmlahq_n_s16:
3693 Param0 = Intrinsic::arm_mve_vqdmlah;
3694 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
3695 break;
3696 case ARM::BI__builtin_arm_mve_vqdmlahq_n_s8:
3697 Param0 = Intrinsic::arm_mve_vqdmlah;
3698 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
3699 break;
3700 case ARM::BI__builtin_arm_mve_vqdmlashq_n_s16:
3701 Param0 = Intrinsic::arm_mve_vqdmlash;
3702 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
3703 break;
3704 case ARM::BI__builtin_arm_mve_vqdmlashq_n_s8:
3705 Param0 = Intrinsic::arm_mve_vqdmlash;
3706 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
3707 break;
3708 case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s16:
3709 Param0 = Intrinsic::arm_mve_vqrdmlah;
3710 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
3711 break;
3712 case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s8:
3713 Param0 = Intrinsic::arm_mve_vqrdmlah;
3714 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
3715 break;
3716 case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s16:
3717 Param0 = Intrinsic::arm_mve_vqrdmlash;
3718 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
3719 break;
3720 case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s8:
3721 Param0 = Intrinsic::arm_mve_vqrdmlash;
3722 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
3723 break;
3724 }
3725 Value *Val0 = EmitScalarExpr(E->getArg(0));
3726 Value *Val1 = EmitScalarExpr(E->getArg(1));
3727 Value *Val2 = EmitScalarExpr(E->getArg(2));
3728 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
3729 return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1, Val3});
3730}
3731case ARM::BI__builtin_arm_mve_vddupq_m_n_u16:
3732case ARM::BI__builtin_arm_mve_vddupq_m_n_u32:
3733case ARM::BI__builtin_arm_mve_vddupq_m_n_u8:
3734case ARM::BI__builtin_arm_mve_vidupq_m_n_u16:
3735case ARM::BI__builtin_arm_mve_vidupq_m_n_u32:
3736case ARM::BI__builtin_arm_mve_vidupq_m_n_u8: {
3737 llvm::Type * Param0;
3738 Intrinsic::ID Param1;
3739 llvm::Type * Param2;
3740 switch (BuiltinID) {
3741 case ARM::BI__builtin_arm_mve_vddupq_m_n_u16:
3742 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3743 Param1 = Intrinsic::arm_mve_vddup_predicated;
3744 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3745 break;
3746 case ARM::BI__builtin_arm_mve_vddupq_m_n_u32:
3747 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3748 Param1 = Intrinsic::arm_mve_vddup_predicated;
3749 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3750 break;
3751 case ARM::BI__builtin_arm_mve_vddupq_m_n_u8:
3752 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3753 Param1 = Intrinsic::arm_mve_vddup_predicated;
3754 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3755 break;
3756 case ARM::BI__builtin_arm_mve_vidupq_m_n_u16:
3757 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3758 Param1 = Intrinsic::arm_mve_vidup_predicated;
3759 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3760 break;
3761 case ARM::BI__builtin_arm_mve_vidupq_m_n_u32:
3762 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3763 Param1 = Intrinsic::arm_mve_vidup_predicated;
3764 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3765 break;
3766 case ARM::BI__builtin_arm_mve_vidupq_m_n_u8:
3767 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3768 Param1 = Intrinsic::arm_mve_vidup_predicated;
3769 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3770 break;
3771 }
3772 Value *Val0 = EmitScalarExpr(E->getArg(0));
3773 Value *Val1 = EmitScalarExpr(E->getArg(1));
3774 Value *Val2 = EmitScalarExpr(E->getArg(2));
3775 Value *Val3 = EmitScalarExpr(E->getArg(3));
3776 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
3777 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
3778 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val5});
3779 return Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
3780}
3781case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f16:
3782case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f32:
3783case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s16:
3784case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s32:
3785case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s8:
3786case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u16:
3787case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u32:
3788case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u8:
3789case ARM::BI__builtin_arm_mve_vmlaq_m_n_s32:
3790case ARM::BI__builtin_arm_mve_vmlaq_m_n_u32:
3791case ARM::BI__builtin_arm_mve_vmlasq_m_n_s32:
3792case ARM::BI__builtin_arm_mve_vmlasq_m_n_u32:
3793case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s32:
3794case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s32:
3795case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s32:
3796case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s32:
3797case ARM::BI__builtin_arm_mve_vsliq_m_n_s16:
3798case ARM::BI__builtin_arm_mve_vsliq_m_n_s32:
3799case ARM::BI__builtin_arm_mve_vsliq_m_n_s8:
3800case ARM::BI__builtin_arm_mve_vsliq_m_n_u16:
3801case ARM::BI__builtin_arm_mve_vsliq_m_n_u32:
3802case ARM::BI__builtin_arm_mve_vsliq_m_n_u8:
3803case ARM::BI__builtin_arm_mve_vsriq_m_n_s16:
3804case ARM::BI__builtin_arm_mve_vsriq_m_n_s32:
3805case ARM::BI__builtin_arm_mve_vsriq_m_n_s8:
3806case ARM::BI__builtin_arm_mve_vsriq_m_n_u16:
3807case ARM::BI__builtin_arm_mve_vsriq_m_n_u32:
3808case ARM::BI__builtin_arm_mve_vsriq_m_n_u8: {
3809 llvm::Type * Param0;
3810 Intrinsic::ID Param1;
3811 llvm::Type * Param2;
3812 switch (BuiltinID) {
3813 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f16:
3814 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3815 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3816 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
3817 break;
3818 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_f32:
3819 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3820 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3821 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
3822 break;
3823 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s16:
3824 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3825 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3826 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3827 break;
3828 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s32:
3829 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3830 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3831 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3832 break;
3833 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_s8:
3834 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3835 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3836 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3837 break;
3838 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u16:
3839 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3840 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3841 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3842 break;
3843 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u32:
3844 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3845 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3846 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3847 break;
3848 case ARM::BI__builtin_arm_mve_vbrsrq_m_n_u8:
3849 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3850 Param1 = Intrinsic::arm_mve_vbrsr_predicated;
3851 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3852 break;
3853 case ARM::BI__builtin_arm_mve_vmlaq_m_n_s32:
3854 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3855 Param1 = Intrinsic::arm_mve_vmla_n_predicated;
3856 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3857 break;
3858 case ARM::BI__builtin_arm_mve_vmlaq_m_n_u32:
3859 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3860 Param1 = Intrinsic::arm_mve_vmla_n_predicated;
3861 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3862 break;
3863 case ARM::BI__builtin_arm_mve_vmlasq_m_n_s32:
3864 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3865 Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
3866 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3867 break;
3868 case ARM::BI__builtin_arm_mve_vmlasq_m_n_u32:
3869 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3870 Param1 = Intrinsic::arm_mve_vmlas_n_predicated;
3871 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3872 break;
3873 case ARM::BI__builtin_arm_mve_vqdmlahq_m_n_s32:
3874 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3875 Param1 = Intrinsic::arm_mve_vqdmlah_predicated;
3876 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3877 break;
3878 case ARM::BI__builtin_arm_mve_vqdmlashq_m_n_s32:
3879 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3880 Param1 = Intrinsic::arm_mve_vqdmlash_predicated;
3881 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3882 break;
3883 case ARM::BI__builtin_arm_mve_vqrdmlahq_m_n_s32:
3884 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3885 Param1 = Intrinsic::arm_mve_vqrdmlah_predicated;
3886 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3887 break;
3888 case ARM::BI__builtin_arm_mve_vqrdmlashq_m_n_s32:
3889 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3890 Param1 = Intrinsic::arm_mve_vqrdmlash_predicated;
3891 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3892 break;
3893 case ARM::BI__builtin_arm_mve_vsliq_m_n_s16:
3894 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3895 Param1 = Intrinsic::arm_mve_vsli_predicated;
3896 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3897 break;
3898 case ARM::BI__builtin_arm_mve_vsliq_m_n_s32:
3899 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3900 Param1 = Intrinsic::arm_mve_vsli_predicated;
3901 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3902 break;
3903 case ARM::BI__builtin_arm_mve_vsliq_m_n_s8:
3904 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3905 Param1 = Intrinsic::arm_mve_vsli_predicated;
3906 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3907 break;
3908 case ARM::BI__builtin_arm_mve_vsliq_m_n_u16:
3909 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3910 Param1 = Intrinsic::arm_mve_vsli_predicated;
3911 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3912 break;
3913 case ARM::BI__builtin_arm_mve_vsliq_m_n_u32:
3914 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3915 Param1 = Intrinsic::arm_mve_vsli_predicated;
3916 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3917 break;
3918 case ARM::BI__builtin_arm_mve_vsliq_m_n_u8:
3919 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3920 Param1 = Intrinsic::arm_mve_vsli_predicated;
3921 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3922 break;
3923 case ARM::BI__builtin_arm_mve_vsriq_m_n_s16:
3924 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3925 Param1 = Intrinsic::arm_mve_vsri_predicated;
3926 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3927 break;
3928 case ARM::BI__builtin_arm_mve_vsriq_m_n_s32:
3929 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3930 Param1 = Intrinsic::arm_mve_vsri_predicated;
3931 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3932 break;
3933 case ARM::BI__builtin_arm_mve_vsriq_m_n_s8:
3934 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3935 Param1 = Intrinsic::arm_mve_vsri_predicated;
3936 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3937 break;
3938 case ARM::BI__builtin_arm_mve_vsriq_m_n_u16:
3939 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
3940 Param1 = Intrinsic::arm_mve_vsri_predicated;
3941 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
3942 break;
3943 case ARM::BI__builtin_arm_mve_vsriq_m_n_u32:
3944 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
3945 Param1 = Intrinsic::arm_mve_vsri_predicated;
3946 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
3947 break;
3948 case ARM::BI__builtin_arm_mve_vsriq_m_n_u8:
3949 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
3950 Param1 = Intrinsic::arm_mve_vsri_predicated;
3951 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
3952 break;
3953 }
3954 Value *Val0 = EmitScalarExpr(E->getArg(0));
3955 Value *Val1 = EmitScalarExpr(E->getArg(1));
3956 Value *Val2 = EmitScalarExpr(E->getArg(2));
3957 Value *Val3 = EmitScalarExpr(E->getArg(3));
3958 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
3959 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
3960 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val5});
3961}
3962case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
3963case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
3964case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
3965case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
3966case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32: {
3967 llvm::Type * Param0;
3968 llvm::Type * Param1;
3969 switch (BuiltinID) {
3970 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_s64:
3971 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
3972 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
3973 break;
3974 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_p_u64:
3975 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
3976 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
3977 break;
3978 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_f32:
3979 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
3980 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
3981 break;
3982 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_s32:
3983 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
3984 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3985 break;
3986 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_p_u32:
3987 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
3988 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
3989 break;
3990 }
3991 Value *Val0 = EmitScalarExpr(E->getArg(0));
3992 Value *Val1 = EmitScalarExpr(E->getArg(1));
3993 Value *Val2 = EmitScalarExpr(E->getArg(2));
3994 Value *Val3 = EmitScalarExpr(E->getArg(3));
3995 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
3996 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
3997 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base_predicated, {Param0, Param1, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val5});
3998}
3999case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u16:
4000case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u32:
4001case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u8:
4002case ARM::BI__builtin_arm_mve_viwdupq_m_n_u16:
4003case ARM::BI__builtin_arm_mve_viwdupq_m_n_u32:
4004case ARM::BI__builtin_arm_mve_viwdupq_m_n_u8: {
4005 llvm::Type * Param0;
4006 Intrinsic::ID Param1;
4007 llvm::Type * Param2;
4008 switch (BuiltinID) {
4009 case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u16:
4010 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4011 Param1 = Intrinsic::arm_mve_vdwdup_predicated;
4012 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
4013 break;
4014 case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u32:
4015 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4016 Param1 = Intrinsic::arm_mve_vdwdup_predicated;
4017 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
4018 break;
4019 case ARM::BI__builtin_arm_mve_vdwdupq_m_n_u8:
4020 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4021 Param1 = Intrinsic::arm_mve_vdwdup_predicated;
4022 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
4023 break;
4024 case ARM::BI__builtin_arm_mve_viwdupq_m_n_u16:
4025 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4026 Param1 = Intrinsic::arm_mve_viwdup_predicated;
4027 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
4028 break;
4029 case ARM::BI__builtin_arm_mve_viwdupq_m_n_u32:
4030 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4031 Param1 = Intrinsic::arm_mve_viwdup_predicated;
4032 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
4033 break;
4034 case ARM::BI__builtin_arm_mve_viwdupq_m_n_u8:
4035 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4036 Param1 = Intrinsic::arm_mve_viwdup_predicated;
4037 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
4038 break;
4039 }
4040 Value *Val0 = EmitScalarExpr(E->getArg(0));
4041 Value *Val1 = EmitScalarExpr(E->getArg(1));
4042 Value *Val2 = EmitScalarExpr(E->getArg(2));
4043 Value *Val3 = EmitScalarExpr(E->getArg(3));
4044 Value *Val4 = EmitScalarExpr(E->getArg(4));
4045 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
4046 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
4047 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val2, Val3, Val6});
4048 return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
4049}
4050case ARM::BI__builtin_arm_mve_vadciq_m_s32:
4051case ARM::BI__builtin_arm_mve_vadciq_m_u32:
4052case ARM::BI__builtin_arm_mve_vsbciq_m_s32:
4053case ARM::BI__builtin_arm_mve_vsbciq_m_u32: {
4054 Intrinsic::ID Param0;
4055 switch (BuiltinID) {
4056 case ARM::BI__builtin_arm_mve_vadciq_m_s32:
4057 Param0 = Intrinsic::arm_mve_vadc_predicated;
4058 break;
4059 case ARM::BI__builtin_arm_mve_vadciq_m_u32:
4060 Param0 = Intrinsic::arm_mve_vadc_predicated;
4061 break;
4062 case ARM::BI__builtin_arm_mve_vsbciq_m_s32:
4063 Param0 = Intrinsic::arm_mve_vsbc_predicated;
4064 break;
4065 case ARM::BI__builtin_arm_mve_vsbciq_m_u32:
4066 Param0 = Intrinsic::arm_mve_vsbc_predicated;
4067 break;
4068 }
4069 Value *Val0 = EmitScalarExpr(E->getArg(0));
4070 Value *Val1 = EmitScalarExpr(E->getArg(1));
4071 Value *Val2 = EmitScalarExpr(E->getArg(2));
4072 Value *Val3 = llvm::ConstantInt::get(Int32Ty, 0);
4073 Value *Val4 = EmitScalarExpr(E->getArg(4));
4074 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
4075 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
4076 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val3, Val6});
4077 Value *Val8 = llvm::ConstantInt::get(Int32Ty, 1);
4078 Value *Val9 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1));
4079 Value *Val10 = llvm::ConstantInt::get(Int32Ty, 29);
4080 Value *Val11 = Builder.CreateLShr(Val9, Val10);
4081 Value *Val12 = Builder.CreateAnd(Val8, Val11);
4082 Address Val13 = EmitPointerWithAlignment(E->getArg(3));
4083 Builder.CreateStore(Val12, Val13);
4084 return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
4085}
4086case ARM::BI__builtin_arm_mve_vqdmladhq_m_s16:
4087case ARM::BI__builtin_arm_mve_vqdmladhq_m_s32:
4088case ARM::BI__builtin_arm_mve_vqdmladhq_m_s8:
4089case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s16:
4090case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s32:
4091case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s8:
4092case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s16:
4093case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s32:
4094case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s8:
4095case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s16:
4096case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s32:
4097case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s8:
4098case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s16:
4099case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s32:
4100case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s8:
4101case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s16:
4102case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s32:
4103case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s8:
4104case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s16:
4105case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s32:
4106case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s8:
4107case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s16:
4108case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s32:
4109case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s8: {
4110 uint32_t Param0;
4111 uint32_t Param1;
4112 uint32_t Param2;
4113 llvm::Type * Param3;
4114 llvm::Type * Param4;
4115 switch (BuiltinID) {
4116 case ARM::BI__builtin_arm_mve_vqdmladhq_m_s16:
4117 Param0 = 0;
4118 Param1 = 0;
4119 Param2 = 0;
4120 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4121 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4122 break;
4123 case ARM::BI__builtin_arm_mve_vqdmladhq_m_s32:
4124 Param0 = 0;
4125 Param1 = 0;
4126 Param2 = 0;
4127 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4128 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4129 break;
4130 case ARM::BI__builtin_arm_mve_vqdmladhq_m_s8:
4131 Param0 = 0;
4132 Param1 = 0;
4133 Param2 = 0;
4134 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4135 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4136 break;
4137 case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s16:
4138 Param0 = 1;
4139 Param1 = 0;
4140 Param2 = 0;
4141 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4142 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4143 break;
4144 case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s32:
4145 Param0 = 1;
4146 Param1 = 0;
4147 Param2 = 0;
4148 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4149 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4150 break;
4151 case ARM::BI__builtin_arm_mve_vqdmladhxq_m_s8:
4152 Param0 = 1;
4153 Param1 = 0;
4154 Param2 = 0;
4155 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4156 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4157 break;
4158 case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s16:
4159 Param0 = 0;
4160 Param1 = 0;
4161 Param2 = 1;
4162 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4163 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4164 break;
4165 case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s32:
4166 Param0 = 0;
4167 Param1 = 0;
4168 Param2 = 1;
4169 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4170 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4171 break;
4172 case ARM::BI__builtin_arm_mve_vqdmlsdhq_m_s8:
4173 Param0 = 0;
4174 Param1 = 0;
4175 Param2 = 1;
4176 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4177 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4178 break;
4179 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s16:
4180 Param0 = 1;
4181 Param1 = 0;
4182 Param2 = 1;
4183 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4184 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4185 break;
4186 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s32:
4187 Param0 = 1;
4188 Param1 = 0;
4189 Param2 = 1;
4190 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4191 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4192 break;
4193 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_m_s8:
4194 Param0 = 1;
4195 Param1 = 0;
4196 Param2 = 1;
4197 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4198 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4199 break;
4200 case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s16:
4201 Param0 = 0;
4202 Param1 = 1;
4203 Param2 = 0;
4204 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4205 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4206 break;
4207 case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s32:
4208 Param0 = 0;
4209 Param1 = 1;
4210 Param2 = 0;
4211 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4212 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4213 break;
4214 case ARM::BI__builtin_arm_mve_vqrdmladhq_m_s8:
4215 Param0 = 0;
4216 Param1 = 1;
4217 Param2 = 0;
4218 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4219 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4220 break;
4221 case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s16:
4222 Param0 = 1;
4223 Param1 = 1;
4224 Param2 = 0;
4225 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4226 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4227 break;
4228 case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s32:
4229 Param0 = 1;
4230 Param1 = 1;
4231 Param2 = 0;
4232 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4233 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4234 break;
4235 case ARM::BI__builtin_arm_mve_vqrdmladhxq_m_s8:
4236 Param0 = 1;
4237 Param1 = 1;
4238 Param2 = 0;
4239 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4240 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4241 break;
4242 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s16:
4243 Param0 = 0;
4244 Param1 = 1;
4245 Param2 = 1;
4246 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4247 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4248 break;
4249 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s32:
4250 Param0 = 0;
4251 Param1 = 1;
4252 Param2 = 1;
4253 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4254 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4255 break;
4256 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_m_s8:
4257 Param0 = 0;
4258 Param1 = 1;
4259 Param2 = 1;
4260 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4261 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4262 break;
4263 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s16:
4264 Param0 = 1;
4265 Param1 = 1;
4266 Param2 = 1;
4267 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4268 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
4269 break;
4270 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s32:
4271 Param0 = 1;
4272 Param1 = 1;
4273 Param2 = 1;
4274 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4275 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
4276 break;
4277 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_m_s8:
4278 Param0 = 1;
4279 Param1 = 1;
4280 Param2 = 1;
4281 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
4282 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
4283 break;
4284 }
4285 Value *Val0 = EmitScalarExpr(E->getArg(0));
4286 Value *Val1 = EmitScalarExpr(E->getArg(1));
4287 Value *Val2 = EmitScalarExpr(E->getArg(2));
4288 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
4289 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
4290 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
4291 Value *Val6 = EmitScalarExpr(E->getArg(3));
4292 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
4293 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val7});
4294 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmlad_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val5, Val8});
4295}
4296case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s16:
4297case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s32:
4298case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u16:
4299case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u32:
4300case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s16:
4301case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s32:
4302case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u16:
4303case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u32:
4304case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s16:
4305case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s32:
4306case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s16:
4307case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s32:
4308case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s16:
4309case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s32:
4310case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u16:
4311case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u32:
4312case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s16:
4313case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s32:
4314case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u16:
4315case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u32:
4316case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s16:
4317case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s32:
4318case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s16:
4319case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s32:
4320case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s16:
4321case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s32:
4322case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u16:
4323case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u32:
4324case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s16:
4325case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s32:
4326case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u16:
4327case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u32:
4328case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s16:
4329case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s32:
4330case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u16:
4331case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u32:
4332case ARM::BI__builtin_arm_mve_vshrntq_m_n_s16:
4333case ARM::BI__builtin_arm_mve_vshrntq_m_n_s32:
4334case ARM::BI__builtin_arm_mve_vshrntq_m_n_u16:
4335case ARM::BI__builtin_arm_mve_vshrntq_m_n_u32: {
4336 uint32_t Param0;
4337 uint32_t Param1;
4338 uint32_t Param2;
4339 uint32_t Param3;
4340 uint32_t Param4;
4341 llvm::Type * Param5;
4342 llvm::Type * Param6;
4343 llvm::Type * Param7;
4344 switch (BuiltinID) {
4345 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s16:
4346 Param0 = 1;
4347 Param1 = 1;
4348 Param2 = 0;
4349 Param3 = 0;
4350 Param4 = 0;
4351 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4352 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4353 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4354 break;
4355 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_s32:
4356 Param0 = 1;
4357 Param1 = 1;
4358 Param2 = 0;
4359 Param3 = 0;
4360 Param4 = 0;
4361 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4362 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4363 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4364 break;
4365 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u16:
4366 Param0 = 1;
4367 Param1 = 1;
4368 Param2 = 1;
4369 Param3 = 1;
4370 Param4 = 0;
4371 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4372 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4373 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4374 break;
4375 case ARM::BI__builtin_arm_mve_vqrshrnbq_m_n_u32:
4376 Param0 = 1;
4377 Param1 = 1;
4378 Param2 = 1;
4379 Param3 = 1;
4380 Param4 = 0;
4381 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4382 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4383 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4384 break;
4385 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s16:
4386 Param0 = 1;
4387 Param1 = 1;
4388 Param2 = 0;
4389 Param3 = 0;
4390 Param4 = 1;
4391 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4392 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4393 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4394 break;
4395 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_s32:
4396 Param0 = 1;
4397 Param1 = 1;
4398 Param2 = 0;
4399 Param3 = 0;
4400 Param4 = 1;
4401 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4402 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4403 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4404 break;
4405 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u16:
4406 Param0 = 1;
4407 Param1 = 1;
4408 Param2 = 1;
4409 Param3 = 1;
4410 Param4 = 1;
4411 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4412 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4413 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4414 break;
4415 case ARM::BI__builtin_arm_mve_vqrshrntq_m_n_u32:
4416 Param0 = 1;
4417 Param1 = 1;
4418 Param2 = 1;
4419 Param3 = 1;
4420 Param4 = 1;
4421 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4422 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4423 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4424 break;
4425 case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s16:
4426 Param0 = 1;
4427 Param1 = 1;
4428 Param2 = 1;
4429 Param3 = 0;
4430 Param4 = 0;
4431 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4432 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4433 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4434 break;
4435 case ARM::BI__builtin_arm_mve_vqrshrunbq_m_n_s32:
4436 Param0 = 1;
4437 Param1 = 1;
4438 Param2 = 1;
4439 Param3 = 0;
4440 Param4 = 0;
4441 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4442 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4443 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4444 break;
4445 case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s16:
4446 Param0 = 1;
4447 Param1 = 1;
4448 Param2 = 1;
4449 Param3 = 0;
4450 Param4 = 1;
4451 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4452 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4453 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4454 break;
4455 case ARM::BI__builtin_arm_mve_vqrshruntq_m_n_s32:
4456 Param0 = 1;
4457 Param1 = 1;
4458 Param2 = 1;
4459 Param3 = 0;
4460 Param4 = 1;
4461 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4462 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4463 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4464 break;
4465 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s16:
4466 Param0 = 1;
4467 Param1 = 0;
4468 Param2 = 0;
4469 Param3 = 0;
4470 Param4 = 0;
4471 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4472 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4473 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4474 break;
4475 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_s32:
4476 Param0 = 1;
4477 Param1 = 0;
4478 Param2 = 0;
4479 Param3 = 0;
4480 Param4 = 0;
4481 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4482 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4483 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4484 break;
4485 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u16:
4486 Param0 = 1;
4487 Param1 = 0;
4488 Param2 = 1;
4489 Param3 = 1;
4490 Param4 = 0;
4491 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4492 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4493 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4494 break;
4495 case ARM::BI__builtin_arm_mve_vqshrnbq_m_n_u32:
4496 Param0 = 1;
4497 Param1 = 0;
4498 Param2 = 1;
4499 Param3 = 1;
4500 Param4 = 0;
4501 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4502 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4503 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4504 break;
4505 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s16:
4506 Param0 = 1;
4507 Param1 = 0;
4508 Param2 = 0;
4509 Param3 = 0;
4510 Param4 = 1;
4511 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4512 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4513 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4514 break;
4515 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_s32:
4516 Param0 = 1;
4517 Param1 = 0;
4518 Param2 = 0;
4519 Param3 = 0;
4520 Param4 = 1;
4521 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4522 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4523 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4524 break;
4525 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u16:
4526 Param0 = 1;
4527 Param1 = 0;
4528 Param2 = 1;
4529 Param3 = 1;
4530 Param4 = 1;
4531 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4532 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4533 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4534 break;
4535 case ARM::BI__builtin_arm_mve_vqshrntq_m_n_u32:
4536 Param0 = 1;
4537 Param1 = 0;
4538 Param2 = 1;
4539 Param3 = 1;
4540 Param4 = 1;
4541 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4542 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4543 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4544 break;
4545 case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s16:
4546 Param0 = 1;
4547 Param1 = 0;
4548 Param2 = 1;
4549 Param3 = 0;
4550 Param4 = 0;
4551 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4552 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4553 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4554 break;
4555 case ARM::BI__builtin_arm_mve_vqshrunbq_m_n_s32:
4556 Param0 = 1;
4557 Param1 = 0;
4558 Param2 = 1;
4559 Param3 = 0;
4560 Param4 = 0;
4561 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4562 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4563 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4564 break;
4565 case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s16:
4566 Param0 = 1;
4567 Param1 = 0;
4568 Param2 = 1;
4569 Param3 = 0;
4570 Param4 = 1;
4571 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4572 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4573 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4574 break;
4575 case ARM::BI__builtin_arm_mve_vqshruntq_m_n_s32:
4576 Param0 = 1;
4577 Param1 = 0;
4578 Param2 = 1;
4579 Param3 = 0;
4580 Param4 = 1;
4581 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4582 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4583 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4584 break;
4585 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s16:
4586 Param0 = 0;
4587 Param1 = 1;
4588 Param2 = 0;
4589 Param3 = 0;
4590 Param4 = 0;
4591 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4592 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4593 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4594 break;
4595 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_s32:
4596 Param0 = 0;
4597 Param1 = 1;
4598 Param2 = 0;
4599 Param3 = 0;
4600 Param4 = 0;
4601 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4602 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4603 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4604 break;
4605 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u16:
4606 Param0 = 0;
4607 Param1 = 1;
4608 Param2 = 1;
4609 Param3 = 1;
4610 Param4 = 0;
4611 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4612 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4613 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4614 break;
4615 case ARM::BI__builtin_arm_mve_vrshrnbq_m_n_u32:
4616 Param0 = 0;
4617 Param1 = 1;
4618 Param2 = 1;
4619 Param3 = 1;
4620 Param4 = 0;
4621 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4622 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4623 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4624 break;
4625 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s16:
4626 Param0 = 0;
4627 Param1 = 1;
4628 Param2 = 0;
4629 Param3 = 0;
4630 Param4 = 1;
4631 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4632 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4633 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4634 break;
4635 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_s32:
4636 Param0 = 0;
4637 Param1 = 1;
4638 Param2 = 0;
4639 Param3 = 0;
4640 Param4 = 1;
4641 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4642 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4643 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4644 break;
4645 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u16:
4646 Param0 = 0;
4647 Param1 = 1;
4648 Param2 = 1;
4649 Param3 = 1;
4650 Param4 = 1;
4651 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4652 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4653 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4654 break;
4655 case ARM::BI__builtin_arm_mve_vrshrntq_m_n_u32:
4656 Param0 = 0;
4657 Param1 = 1;
4658 Param2 = 1;
4659 Param3 = 1;
4660 Param4 = 1;
4661 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4662 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4663 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4664 break;
4665 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s16:
4666 Param0 = 0;
4667 Param1 = 0;
4668 Param2 = 0;
4669 Param3 = 0;
4670 Param4 = 0;
4671 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4672 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4673 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4674 break;
4675 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_s32:
4676 Param0 = 0;
4677 Param1 = 0;
4678 Param2 = 0;
4679 Param3 = 0;
4680 Param4 = 0;
4681 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4682 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4683 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4684 break;
4685 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u16:
4686 Param0 = 0;
4687 Param1 = 0;
4688 Param2 = 1;
4689 Param3 = 1;
4690 Param4 = 0;
4691 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4692 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4693 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4694 break;
4695 case ARM::BI__builtin_arm_mve_vshrnbq_m_n_u32:
4696 Param0 = 0;
4697 Param1 = 0;
4698 Param2 = 1;
4699 Param3 = 1;
4700 Param4 = 0;
4701 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4702 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4703 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4704 break;
4705 case ARM::BI__builtin_arm_mve_vshrntq_m_n_s16:
4706 Param0 = 0;
4707 Param1 = 0;
4708 Param2 = 0;
4709 Param3 = 0;
4710 Param4 = 1;
4711 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4712 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4713 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4714 break;
4715 case ARM::BI__builtin_arm_mve_vshrntq_m_n_s32:
4716 Param0 = 0;
4717 Param1 = 0;
4718 Param2 = 0;
4719 Param3 = 0;
4720 Param4 = 1;
4721 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4722 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4723 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4724 break;
4725 case ARM::BI__builtin_arm_mve_vshrntq_m_n_u16:
4726 Param0 = 0;
4727 Param1 = 0;
4728 Param2 = 1;
4729 Param3 = 1;
4730 Param4 = 1;
4731 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
4732 Param6 = llvm::FixedVectorType::get(Int8Ty, 16);
4733 Param7 = llvm::FixedVectorType::get(Int16Ty, 8);
4734 break;
4735 case ARM::BI__builtin_arm_mve_vshrntq_m_n_u32:
4736 Param0 = 0;
4737 Param1 = 0;
4738 Param2 = 1;
4739 Param3 = 1;
4740 Param4 = 1;
4741 Param5 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
4742 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4743 Param7 = llvm::FixedVectorType::get(Int32Ty, 4);
4744 break;
4745 }
4746 Value *Val0 = EmitScalarExpr(E->getArg(0));
4747 Value *Val1 = EmitScalarExpr(E->getArg(1));
4748 Value *Val2 = EmitScalarExpr(E->getArg(2));
4749 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
4750 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
4751 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
4752 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param3);
4753 Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param4);
4754 Value *Val8 = EmitScalarExpr(E->getArg(3));
4755 Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
4756 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param5}), {Val9});
4757 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshrn_predicated, {Param6, Param7, Param5}), {Val0, Val1, Val2, Val3, Val4, Val5, Val6, Val7, Val10});
4758}
4759case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s16:
4760case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s32:
4761case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u16:
4762case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u32:
4763case ARM::BI__builtin_arm_mve_vqrshrntq_n_s16:
4764case ARM::BI__builtin_arm_mve_vqrshrntq_n_s32:
4765case ARM::BI__builtin_arm_mve_vqrshrntq_n_u16:
4766case ARM::BI__builtin_arm_mve_vqrshrntq_n_u32:
4767case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s16:
4768case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s32:
4769case ARM::BI__builtin_arm_mve_vqrshruntq_n_s16:
4770case ARM::BI__builtin_arm_mve_vqrshruntq_n_s32:
4771case ARM::BI__builtin_arm_mve_vqshrnbq_n_s16:
4772case ARM::BI__builtin_arm_mve_vqshrnbq_n_s32:
4773case ARM::BI__builtin_arm_mve_vqshrnbq_n_u16:
4774case ARM::BI__builtin_arm_mve_vqshrnbq_n_u32:
4775case ARM::BI__builtin_arm_mve_vqshrntq_n_s16:
4776case ARM::BI__builtin_arm_mve_vqshrntq_n_s32:
4777case ARM::BI__builtin_arm_mve_vqshrntq_n_u16:
4778case ARM::BI__builtin_arm_mve_vqshrntq_n_u32:
4779case ARM::BI__builtin_arm_mve_vqshrunbq_n_s16:
4780case ARM::BI__builtin_arm_mve_vqshrunbq_n_s32:
4781case ARM::BI__builtin_arm_mve_vqshruntq_n_s16:
4782case ARM::BI__builtin_arm_mve_vqshruntq_n_s32:
4783case ARM::BI__builtin_arm_mve_vrshrnbq_n_s16:
4784case ARM::BI__builtin_arm_mve_vrshrnbq_n_s32:
4785case ARM::BI__builtin_arm_mve_vrshrnbq_n_u16:
4786case ARM::BI__builtin_arm_mve_vrshrnbq_n_u32:
4787case ARM::BI__builtin_arm_mve_vrshrntq_n_s16:
4788case ARM::BI__builtin_arm_mve_vrshrntq_n_s32:
4789case ARM::BI__builtin_arm_mve_vrshrntq_n_u16:
4790case ARM::BI__builtin_arm_mve_vrshrntq_n_u32:
4791case ARM::BI__builtin_arm_mve_vshrnbq_n_s16:
4792case ARM::BI__builtin_arm_mve_vshrnbq_n_s32:
4793case ARM::BI__builtin_arm_mve_vshrnbq_n_u16:
4794case ARM::BI__builtin_arm_mve_vshrnbq_n_u32:
4795case ARM::BI__builtin_arm_mve_vshrntq_n_s16:
4796case ARM::BI__builtin_arm_mve_vshrntq_n_s32:
4797case ARM::BI__builtin_arm_mve_vshrntq_n_u16:
4798case ARM::BI__builtin_arm_mve_vshrntq_n_u32: {
4799 uint32_t Param0;
4800 uint32_t Param1;
4801 uint32_t Param2;
4802 uint32_t Param3;
4803 uint32_t Param4;
4804 llvm::Type * Param5;
4805 llvm::Type * Param6;
4806 switch (BuiltinID) {
4807 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s16:
4808 Param0 = 1;
4809 Param1 = 1;
4810 Param2 = 0;
4811 Param3 = 0;
4812 Param4 = 0;
4813 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4814 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4815 break;
4816 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_s32:
4817 Param0 = 1;
4818 Param1 = 1;
4819 Param2 = 0;
4820 Param3 = 0;
4821 Param4 = 0;
4822 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4823 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4824 break;
4825 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u16:
4826 Param0 = 1;
4827 Param1 = 1;
4828 Param2 = 1;
4829 Param3 = 1;
4830 Param4 = 0;
4831 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4832 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4833 break;
4834 case ARM::BI__builtin_arm_mve_vqrshrnbq_n_u32:
4835 Param0 = 1;
4836 Param1 = 1;
4837 Param2 = 1;
4838 Param3 = 1;
4839 Param4 = 0;
4840 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4841 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4842 break;
4843 case ARM::BI__builtin_arm_mve_vqrshrntq_n_s16:
4844 Param0 = 1;
4845 Param1 = 1;
4846 Param2 = 0;
4847 Param3 = 0;
4848 Param4 = 1;
4849 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4850 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4851 break;
4852 case ARM::BI__builtin_arm_mve_vqrshrntq_n_s32:
4853 Param0 = 1;
4854 Param1 = 1;
4855 Param2 = 0;
4856 Param3 = 0;
4857 Param4 = 1;
4858 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4859 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4860 break;
4861 case ARM::BI__builtin_arm_mve_vqrshrntq_n_u16:
4862 Param0 = 1;
4863 Param1 = 1;
4864 Param2 = 1;
4865 Param3 = 1;
4866 Param4 = 1;
4867 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4868 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4869 break;
4870 case ARM::BI__builtin_arm_mve_vqrshrntq_n_u32:
4871 Param0 = 1;
4872 Param1 = 1;
4873 Param2 = 1;
4874 Param3 = 1;
4875 Param4 = 1;
4876 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4877 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4878 break;
4879 case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s16:
4880 Param0 = 1;
4881 Param1 = 1;
4882 Param2 = 1;
4883 Param3 = 0;
4884 Param4 = 0;
4885 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4886 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4887 break;
4888 case ARM::BI__builtin_arm_mve_vqrshrunbq_n_s32:
4889 Param0 = 1;
4890 Param1 = 1;
4891 Param2 = 1;
4892 Param3 = 0;
4893 Param4 = 0;
4894 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4895 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4896 break;
4897 case ARM::BI__builtin_arm_mve_vqrshruntq_n_s16:
4898 Param0 = 1;
4899 Param1 = 1;
4900 Param2 = 1;
4901 Param3 = 0;
4902 Param4 = 1;
4903 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4904 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4905 break;
4906 case ARM::BI__builtin_arm_mve_vqrshruntq_n_s32:
4907 Param0 = 1;
4908 Param1 = 1;
4909 Param2 = 1;
4910 Param3 = 0;
4911 Param4 = 1;
4912 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4913 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4914 break;
4915 case ARM::BI__builtin_arm_mve_vqshrnbq_n_s16:
4916 Param0 = 1;
4917 Param1 = 0;
4918 Param2 = 0;
4919 Param3 = 0;
4920 Param4 = 0;
4921 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4922 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4923 break;
4924 case ARM::BI__builtin_arm_mve_vqshrnbq_n_s32:
4925 Param0 = 1;
4926 Param1 = 0;
4927 Param2 = 0;
4928 Param3 = 0;
4929 Param4 = 0;
4930 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4931 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4932 break;
4933 case ARM::BI__builtin_arm_mve_vqshrnbq_n_u16:
4934 Param0 = 1;
4935 Param1 = 0;
4936 Param2 = 1;
4937 Param3 = 1;
4938 Param4 = 0;
4939 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4940 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4941 break;
4942 case ARM::BI__builtin_arm_mve_vqshrnbq_n_u32:
4943 Param0 = 1;
4944 Param1 = 0;
4945 Param2 = 1;
4946 Param3 = 1;
4947 Param4 = 0;
4948 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4949 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4950 break;
4951 case ARM::BI__builtin_arm_mve_vqshrntq_n_s16:
4952 Param0 = 1;
4953 Param1 = 0;
4954 Param2 = 0;
4955 Param3 = 0;
4956 Param4 = 1;
4957 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4958 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4959 break;
4960 case ARM::BI__builtin_arm_mve_vqshrntq_n_s32:
4961 Param0 = 1;
4962 Param1 = 0;
4963 Param2 = 0;
4964 Param3 = 0;
4965 Param4 = 1;
4966 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4967 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4968 break;
4969 case ARM::BI__builtin_arm_mve_vqshrntq_n_u16:
4970 Param0 = 1;
4971 Param1 = 0;
4972 Param2 = 1;
4973 Param3 = 1;
4974 Param4 = 1;
4975 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4976 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4977 break;
4978 case ARM::BI__builtin_arm_mve_vqshrntq_n_u32:
4979 Param0 = 1;
4980 Param1 = 0;
4981 Param2 = 1;
4982 Param3 = 1;
4983 Param4 = 1;
4984 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
4985 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
4986 break;
4987 case ARM::BI__builtin_arm_mve_vqshrunbq_n_s16:
4988 Param0 = 1;
4989 Param1 = 0;
4990 Param2 = 1;
4991 Param3 = 0;
4992 Param4 = 0;
4993 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
4994 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
4995 break;
4996 case ARM::BI__builtin_arm_mve_vqshrunbq_n_s32:
4997 Param0 = 1;
4998 Param1 = 0;
4999 Param2 = 1;
5000 Param3 = 0;
5001 Param4 = 0;
5002 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5003 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5004 break;
5005 case ARM::BI__builtin_arm_mve_vqshruntq_n_s16:
5006 Param0 = 1;
5007 Param1 = 0;
5008 Param2 = 1;
5009 Param3 = 0;
5010 Param4 = 1;
5011 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5012 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5013 break;
5014 case ARM::BI__builtin_arm_mve_vqshruntq_n_s32:
5015 Param0 = 1;
5016 Param1 = 0;
5017 Param2 = 1;
5018 Param3 = 0;
5019 Param4 = 1;
5020 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5021 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5022 break;
5023 case ARM::BI__builtin_arm_mve_vrshrnbq_n_s16:
5024 Param0 = 0;
5025 Param1 = 1;
5026 Param2 = 0;
5027 Param3 = 0;
5028 Param4 = 0;
5029 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5030 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5031 break;
5032 case ARM::BI__builtin_arm_mve_vrshrnbq_n_s32:
5033 Param0 = 0;
5034 Param1 = 1;
5035 Param2 = 0;
5036 Param3 = 0;
5037 Param4 = 0;
5038 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5039 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5040 break;
5041 case ARM::BI__builtin_arm_mve_vrshrnbq_n_u16:
5042 Param0 = 0;
5043 Param1 = 1;
5044 Param2 = 1;
5045 Param3 = 1;
5046 Param4 = 0;
5047 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5048 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5049 break;
5050 case ARM::BI__builtin_arm_mve_vrshrnbq_n_u32:
5051 Param0 = 0;
5052 Param1 = 1;
5053 Param2 = 1;
5054 Param3 = 1;
5055 Param4 = 0;
5056 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5057 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5058 break;
5059 case ARM::BI__builtin_arm_mve_vrshrntq_n_s16:
5060 Param0 = 0;
5061 Param1 = 1;
5062 Param2 = 0;
5063 Param3 = 0;
5064 Param4 = 1;
5065 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5066 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5067 break;
5068 case ARM::BI__builtin_arm_mve_vrshrntq_n_s32:
5069 Param0 = 0;
5070 Param1 = 1;
5071 Param2 = 0;
5072 Param3 = 0;
5073 Param4 = 1;
5074 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5075 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5076 break;
5077 case ARM::BI__builtin_arm_mve_vrshrntq_n_u16:
5078 Param0 = 0;
5079 Param1 = 1;
5080 Param2 = 1;
5081 Param3 = 1;
5082 Param4 = 1;
5083 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5084 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5085 break;
5086 case ARM::BI__builtin_arm_mve_vrshrntq_n_u32:
5087 Param0 = 0;
5088 Param1 = 1;
5089 Param2 = 1;
5090 Param3 = 1;
5091 Param4 = 1;
5092 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5093 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5094 break;
5095 case ARM::BI__builtin_arm_mve_vshrnbq_n_s16:
5096 Param0 = 0;
5097 Param1 = 0;
5098 Param2 = 0;
5099 Param3 = 0;
5100 Param4 = 0;
5101 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5102 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5103 break;
5104 case ARM::BI__builtin_arm_mve_vshrnbq_n_s32:
5105 Param0 = 0;
5106 Param1 = 0;
5107 Param2 = 0;
5108 Param3 = 0;
5109 Param4 = 0;
5110 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5111 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5112 break;
5113 case ARM::BI__builtin_arm_mve_vshrnbq_n_u16:
5114 Param0 = 0;
5115 Param1 = 0;
5116 Param2 = 1;
5117 Param3 = 1;
5118 Param4 = 0;
5119 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5120 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5121 break;
5122 case ARM::BI__builtin_arm_mve_vshrnbq_n_u32:
5123 Param0 = 0;
5124 Param1 = 0;
5125 Param2 = 1;
5126 Param3 = 1;
5127 Param4 = 0;
5128 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5129 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5130 break;
5131 case ARM::BI__builtin_arm_mve_vshrntq_n_s16:
5132 Param0 = 0;
5133 Param1 = 0;
5134 Param2 = 0;
5135 Param3 = 0;
5136 Param4 = 1;
5137 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5138 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5139 break;
5140 case ARM::BI__builtin_arm_mve_vshrntq_n_s32:
5141 Param0 = 0;
5142 Param1 = 0;
5143 Param2 = 0;
5144 Param3 = 0;
5145 Param4 = 1;
5146 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5147 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5148 break;
5149 case ARM::BI__builtin_arm_mve_vshrntq_n_u16:
5150 Param0 = 0;
5151 Param1 = 0;
5152 Param2 = 1;
5153 Param3 = 1;
5154 Param4 = 1;
5155 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
5156 Param6 = llvm::FixedVectorType::get(Int16Ty, 8);
5157 break;
5158 case ARM::BI__builtin_arm_mve_vshrntq_n_u32:
5159 Param0 = 0;
5160 Param1 = 0;
5161 Param2 = 1;
5162 Param3 = 1;
5163 Param4 = 1;
5164 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5165 Param6 = llvm::FixedVectorType::get(Int32Ty, 4);
5166 break;
5167 }
5168 Value *Val0 = EmitScalarExpr(E->getArg(0));
5169 Value *Val1 = EmitScalarExpr(E->getArg(1));
5170 Value *Val2 = EmitScalarExpr(E->getArg(2));
5171 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
5172 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
5173 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
5174 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param3);
5175 Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param4);
5176 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshrn, {Param5, Param6}), {Val0, Val1, Val2, Val3, Val4, Val5, Val6, Val7});
5177}
5178case ARM::BI__builtin_arm_mve_vqdmladhq_s16:
5179case ARM::BI__builtin_arm_mve_vqdmladhq_s32:
5180case ARM::BI__builtin_arm_mve_vqdmladhq_s8:
5181case ARM::BI__builtin_arm_mve_vqdmladhxq_s16:
5182case ARM::BI__builtin_arm_mve_vqdmladhxq_s32:
5183case ARM::BI__builtin_arm_mve_vqdmladhxq_s8:
5184case ARM::BI__builtin_arm_mve_vqdmlsdhq_s16:
5185case ARM::BI__builtin_arm_mve_vqdmlsdhq_s32:
5186case ARM::BI__builtin_arm_mve_vqdmlsdhq_s8:
5187case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s16:
5188case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s32:
5189case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s8:
5190case ARM::BI__builtin_arm_mve_vqrdmladhq_s16:
5191case ARM::BI__builtin_arm_mve_vqrdmladhq_s32:
5192case ARM::BI__builtin_arm_mve_vqrdmladhq_s8:
5193case ARM::BI__builtin_arm_mve_vqrdmladhxq_s16:
5194case ARM::BI__builtin_arm_mve_vqrdmladhxq_s32:
5195case ARM::BI__builtin_arm_mve_vqrdmladhxq_s8:
5196case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s16:
5197case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s32:
5198case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s8:
5199case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s16:
5200case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s32:
5201case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s8: {
5202 uint32_t Param0;
5203 uint32_t Param1;
5204 uint32_t Param2;
5205 llvm::Type * Param3;
5206 switch (BuiltinID) {
5207 case ARM::BI__builtin_arm_mve_vqdmladhq_s16:
5208 Param0 = 0;
5209 Param1 = 0;
5210 Param2 = 0;
5211 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5212 break;
5213 case ARM::BI__builtin_arm_mve_vqdmladhq_s32:
5214 Param0 = 0;
5215 Param1 = 0;
5216 Param2 = 0;
5217 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5218 break;
5219 case ARM::BI__builtin_arm_mve_vqdmladhq_s8:
5220 Param0 = 0;
5221 Param1 = 0;
5222 Param2 = 0;
5223 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5224 break;
5225 case ARM::BI__builtin_arm_mve_vqdmladhxq_s16:
5226 Param0 = 1;
5227 Param1 = 0;
5228 Param2 = 0;
5229 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5230 break;
5231 case ARM::BI__builtin_arm_mve_vqdmladhxq_s32:
5232 Param0 = 1;
5233 Param1 = 0;
5234 Param2 = 0;
5235 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5236 break;
5237 case ARM::BI__builtin_arm_mve_vqdmladhxq_s8:
5238 Param0 = 1;
5239 Param1 = 0;
5240 Param2 = 0;
5241 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5242 break;
5243 case ARM::BI__builtin_arm_mve_vqdmlsdhq_s16:
5244 Param0 = 0;
5245 Param1 = 0;
5246 Param2 = 1;
5247 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5248 break;
5249 case ARM::BI__builtin_arm_mve_vqdmlsdhq_s32:
5250 Param0 = 0;
5251 Param1 = 0;
5252 Param2 = 1;
5253 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5254 break;
5255 case ARM::BI__builtin_arm_mve_vqdmlsdhq_s8:
5256 Param0 = 0;
5257 Param1 = 0;
5258 Param2 = 1;
5259 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5260 break;
5261 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s16:
5262 Param0 = 1;
5263 Param1 = 0;
5264 Param2 = 1;
5265 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5266 break;
5267 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s32:
5268 Param0 = 1;
5269 Param1 = 0;
5270 Param2 = 1;
5271 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5272 break;
5273 case ARM::BI__builtin_arm_mve_vqdmlsdhxq_s8:
5274 Param0 = 1;
5275 Param1 = 0;
5276 Param2 = 1;
5277 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5278 break;
5279 case ARM::BI__builtin_arm_mve_vqrdmladhq_s16:
5280 Param0 = 0;
5281 Param1 = 1;
5282 Param2 = 0;
5283 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5284 break;
5285 case ARM::BI__builtin_arm_mve_vqrdmladhq_s32:
5286 Param0 = 0;
5287 Param1 = 1;
5288 Param2 = 0;
5289 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5290 break;
5291 case ARM::BI__builtin_arm_mve_vqrdmladhq_s8:
5292 Param0 = 0;
5293 Param1 = 1;
5294 Param2 = 0;
5295 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5296 break;
5297 case ARM::BI__builtin_arm_mve_vqrdmladhxq_s16:
5298 Param0 = 1;
5299 Param1 = 1;
5300 Param2 = 0;
5301 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5302 break;
5303 case ARM::BI__builtin_arm_mve_vqrdmladhxq_s32:
5304 Param0 = 1;
5305 Param1 = 1;
5306 Param2 = 0;
5307 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5308 break;
5309 case ARM::BI__builtin_arm_mve_vqrdmladhxq_s8:
5310 Param0 = 1;
5311 Param1 = 1;
5312 Param2 = 0;
5313 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5314 break;
5315 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s16:
5316 Param0 = 0;
5317 Param1 = 1;
5318 Param2 = 1;
5319 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5320 break;
5321 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s32:
5322 Param0 = 0;
5323 Param1 = 1;
5324 Param2 = 1;
5325 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5326 break;
5327 case ARM::BI__builtin_arm_mve_vqrdmlsdhq_s8:
5328 Param0 = 0;
5329 Param1 = 1;
5330 Param2 = 1;
5331 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5332 break;
5333 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s16:
5334 Param0 = 1;
5335 Param1 = 1;
5336 Param2 = 1;
5337 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5338 break;
5339 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s32:
5340 Param0 = 1;
5341 Param1 = 1;
5342 Param2 = 1;
5343 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5344 break;
5345 case ARM::BI__builtin_arm_mve_vqrdmlsdhxq_s8:
5346 Param0 = 1;
5347 Param1 = 1;
5348 Param2 = 1;
5349 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
5350 break;
5351 }
5352 Value *Val0 = EmitScalarExpr(E->getArg(0));
5353 Value *Val1 = EmitScalarExpr(E->getArg(1));
5354 Value *Val2 = EmitScalarExpr(E->getArg(2));
5355 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
5356 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
5357 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param2);
5358 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmlad, {Param3}), {Val0, Val1, Val2, Val3, Val4, Val5});
5359}
5360case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_s64:
5361case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_u64:
5362case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_f32:
5363case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_s32:
5364case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_u32: {
5365 llvm::Type * Param0;
5366 llvm::Type * Param1;
5367 switch (BuiltinID) {
5368 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_s64:
5369 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
5370 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
5371 break;
5372 case ARM::BI__builtin_arm_mve_vstrdq_scatter_base_u64:
5373 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
5374 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
5375 break;
5376 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_f32:
5377 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
5378 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
5379 break;
5380 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_s32:
5381 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
5382 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5383 break;
5384 case ARM::BI__builtin_arm_mve_vstrwq_scatter_base_u32:
5385 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
5386 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5387 break;
5388 }
5389 Value *Val0 = EmitScalarExpr(E->getArg(0));
5390 Value *Val1 = EmitScalarExpr(E->getArg(1));
5391 Value *Val2 = EmitScalarExpr(E->getArg(2));
5392 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vstr_scatter_base, {Param0, Param1}), {Val0, Val1, Val2});
5393}
5394case ARM::BI__builtin_arm_mve_vqdmlahq_n_s32:
5395case ARM::BI__builtin_arm_mve_vqdmlashq_n_s32:
5396case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s32:
5397case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s32:
5398case ARM::BI__builtin_arm_mve_vsliq_n_s16:
5399case ARM::BI__builtin_arm_mve_vsliq_n_s32:
5400case ARM::BI__builtin_arm_mve_vsliq_n_s8:
5401case ARM::BI__builtin_arm_mve_vsliq_n_u16:
5402case ARM::BI__builtin_arm_mve_vsliq_n_u32:
5403case ARM::BI__builtin_arm_mve_vsliq_n_u8:
5404case ARM::BI__builtin_arm_mve_vsriq_n_s16:
5405case ARM::BI__builtin_arm_mve_vsriq_n_s32:
5406case ARM::BI__builtin_arm_mve_vsriq_n_s8:
5407case ARM::BI__builtin_arm_mve_vsriq_n_u16:
5408case ARM::BI__builtin_arm_mve_vsriq_n_u32:
5409case ARM::BI__builtin_arm_mve_vsriq_n_u8: {
5410 Intrinsic::ID Param0;
5411 llvm::Type * Param1;
5412 switch (BuiltinID) {
5413 case ARM::BI__builtin_arm_mve_vqdmlahq_n_s32:
5414 Param0 = Intrinsic::arm_mve_vqdmlah;
5415 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5416 break;
5417 case ARM::BI__builtin_arm_mve_vqdmlashq_n_s32:
5418 Param0 = Intrinsic::arm_mve_vqdmlash;
5419 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5420 break;
5421 case ARM::BI__builtin_arm_mve_vqrdmlahq_n_s32:
5422 Param0 = Intrinsic::arm_mve_vqrdmlah;
5423 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5424 break;
5425 case ARM::BI__builtin_arm_mve_vqrdmlashq_n_s32:
5426 Param0 = Intrinsic::arm_mve_vqrdmlash;
5427 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5428 break;
5429 case ARM::BI__builtin_arm_mve_vsliq_n_s16:
5430 Param0 = Intrinsic::arm_mve_vsli;
5431 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
5432 break;
5433 case ARM::BI__builtin_arm_mve_vsliq_n_s32:
5434 Param0 = Intrinsic::arm_mve_vsli;
5435 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5436 break;
5437 case ARM::BI__builtin_arm_mve_vsliq_n_s8:
5438 Param0 = Intrinsic::arm_mve_vsli;
5439 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
5440 break;
5441 case ARM::BI__builtin_arm_mve_vsliq_n_u16:
5442 Param0 = Intrinsic::arm_mve_vsli;
5443 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
5444 break;
5445 case ARM::BI__builtin_arm_mve_vsliq_n_u32:
5446 Param0 = Intrinsic::arm_mve_vsli;
5447 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5448 break;
5449 case ARM::BI__builtin_arm_mve_vsliq_n_u8:
5450 Param0 = Intrinsic::arm_mve_vsli;
5451 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
5452 break;
5453 case ARM::BI__builtin_arm_mve_vsriq_n_s16:
5454 Param0 = Intrinsic::arm_mve_vsri;
5455 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
5456 break;
5457 case ARM::BI__builtin_arm_mve_vsriq_n_s32:
5458 Param0 = Intrinsic::arm_mve_vsri;
5459 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5460 break;
5461 case ARM::BI__builtin_arm_mve_vsriq_n_s8:
5462 Param0 = Intrinsic::arm_mve_vsri;
5463 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
5464 break;
5465 case ARM::BI__builtin_arm_mve_vsriq_n_u16:
5466 Param0 = Intrinsic::arm_mve_vsri;
5467 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
5468 break;
5469 case ARM::BI__builtin_arm_mve_vsriq_n_u32:
5470 Param0 = Intrinsic::arm_mve_vsri;
5471 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
5472 break;
5473 case ARM::BI__builtin_arm_mve_vsriq_n_u8:
5474 Param0 = Intrinsic::arm_mve_vsri;
5475 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
5476 break;
5477 }
5478 Value *Val0 = EmitScalarExpr(E->getArg(0));
5479 Value *Val1 = EmitScalarExpr(E->getArg(1));
5480 Value *Val2 = EmitScalarExpr(E->getArg(2));
5481 return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1, Val2});
5482}
5483case ARM::BI__builtin_arm_mve_vadciq_s32:
5484case ARM::BI__builtin_arm_mve_vadciq_u32:
5485case ARM::BI__builtin_arm_mve_vsbciq_s32:
5486case ARM::BI__builtin_arm_mve_vsbciq_u32: {
5487 Intrinsic::ID Param0;
5488 switch (BuiltinID) {
5489 case ARM::BI__builtin_arm_mve_vadciq_s32:
5490 Param0 = Intrinsic::arm_mve_vadc;
5491 break;
5492 case ARM::BI__builtin_arm_mve_vadciq_u32:
5493 Param0 = Intrinsic::arm_mve_vadc;
5494 break;
5495 case ARM::BI__builtin_arm_mve_vsbciq_s32:
5496 Param0 = Intrinsic::arm_mve_vsbc;
5497 break;
5498 case ARM::BI__builtin_arm_mve_vsbciq_u32:
5499 Param0 = Intrinsic::arm_mve_vsbc;
5500 break;
5501 }
5502 Value *Val0 = EmitScalarExpr(E->getArg(0));
5503 Value *Val1 = EmitScalarExpr(E->getArg(1));
5504 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 0);
5505 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1, Val2});
5506 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 1);
5507 Value *Val5 = Builder.CreateExtractValue(Val3, static_cast<unsigned>(1));
5508 Value *Val6 = llvm::ConstantInt::get(Int32Ty, 29);
5509 Value *Val7 = Builder.CreateLShr(Val5, Val6);
5510 Value *Val8 = Builder.CreateAnd(Val4, Val7);
5511 Address Val9 = EmitPointerWithAlignment(E->getArg(2));
5512 Builder.CreateStore(Val8, Val9);
5513 return Builder.CreateExtractValue(Val3, static_cast<unsigned>(0));
5514}
5515case ARM::BI__builtin_arm_mve_vmaxvq_s32:
5516case ARM::BI__builtin_arm_mve_vmaxvq_u32:
5517case ARM::BI__builtin_arm_mve_vminvq_s32:
5518case ARM::BI__builtin_arm_mve_vminvq_u32: {
5519 uint32_t Param0;
5520 Intrinsic::ID Param1;
5521 bool Param2;
5522 switch (BuiltinID) {
5523 case ARM::BI__builtin_arm_mve_vmaxvq_s32:
5524 Param0 = 0;
5525 Param1 = Intrinsic::arm_mve_maxv;
5526 Param2 = true;
5527 break;
5528 case ARM::BI__builtin_arm_mve_vmaxvq_u32:
5529 Param0 = 1;
5530 Param1 = Intrinsic::arm_mve_maxv;
5531 Param2 = false;
5532 break;
5533 case ARM::BI__builtin_arm_mve_vminvq_s32:
5534 Param0 = 0;
5535 Param1 = Intrinsic::arm_mve_minv;
5536 Param2 = true;
5537 break;
5538 case ARM::BI__builtin_arm_mve_vminvq_u32:
5539 Param0 = 1;
5540 Param1 = Intrinsic::arm_mve_minv;
5541 Param2 = false;
5542 break;
5543 }
5544 Value *Val0 = EmitScalarExpr(E->getArg(0));
5545 Value *Val1 = EmitScalarExpr(E->getArg(1));
5546 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
5547 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4)}), {Val0, Val1, Val2});
5548 return Builder.CreateIntCast(Val3, Int32Ty, Param2);
5549}
5550case ARM::BI__builtin_arm_mve_vmovnbq_m_s16:
5551case ARM::BI__builtin_arm_mve_vmovnbq_m_s32:
5552case ARM::BI__builtin_arm_mve_vmovnbq_m_u16:
5553case ARM::BI__builtin_arm_mve_vmovnbq_m_u32:
5554case ARM::BI__builtin_arm_mve_vmovntq_m_s16:
5555case ARM::BI__builtin_arm_mve_vmovntq_m_s32:
5556case ARM::BI__builtin_arm_mve_vmovntq_m_u16:
5557case ARM::BI__builtin_arm_mve_vmovntq_m_u32: {
5558 uint32_t Param0;
5559 llvm::Type * Param1;
5560 llvm::Type * Param2;
5561 llvm::Type * Param3;
5562 switch (BuiltinID) {
5563 case ARM::BI__builtin_arm_mve_vmovnbq_m_s16:
5564 Param0 = 0;
5565 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5566 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
5567 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5568 break;
5569 case ARM::BI__builtin_arm_mve_vmovnbq_m_s32:
5570 Param0 = 0;
5571 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5572 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
5573 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5574 break;
5575 case ARM::BI__builtin_arm_mve_vmovnbq_m_u16:
5576 Param0 = 0;
5577 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5578 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
5579 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5580 break;
5581 case ARM::BI__builtin_arm_mve_vmovnbq_m_u32:
5582 Param0 = 0;
5583 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5584 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
5585 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5586 break;
5587 case ARM::BI__builtin_arm_mve_vmovntq_m_s16:
5588 Param0 = 1;
5589 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5590 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
5591 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5592 break;
5593 case ARM::BI__builtin_arm_mve_vmovntq_m_s32:
5594 Param0 = 1;
5595 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5596 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
5597 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5598 break;
5599 case ARM::BI__builtin_arm_mve_vmovntq_m_u16:
5600 Param0 = 1;
5601 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5602 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
5603 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
5604 break;
5605 case ARM::BI__builtin_arm_mve_vmovntq_m_u32:
5606 Param0 = 1;
5607 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5608 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
5609 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
5610 break;
5611 }
5612 Value *Val0 = EmitScalarExpr(E->getArg(0));
5613 Value *Val1 = EmitScalarExpr(E->getArg(1));
5614 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
5615 Value *Val3 = EmitScalarExpr(E->getArg(2));
5616 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
5617 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
5618 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovn_predicated, {Param2, Param3, Param1}), {Val0, Val1, Val2, Val5});
5619}
5620case ARM::BI__builtin_arm_mve_vmaxvq_p_s32:
5621case ARM::BI__builtin_arm_mve_vmaxvq_p_u32:
5622case ARM::BI__builtin_arm_mve_vminvq_p_s32:
5623case ARM::BI__builtin_arm_mve_vminvq_p_u32: {
5624 uint32_t Param0;
5625 Intrinsic::ID Param1;
5626 bool Param2;
5627 switch (BuiltinID) {
5628 case ARM::BI__builtin_arm_mve_vmaxvq_p_s32:
5629 Param0 = 0;
5630 Param1 = Intrinsic::arm_mve_maxv_predicated;
5631 Param2 = true;
5632 break;
5633 case ARM::BI__builtin_arm_mve_vmaxvq_p_u32:
5634 Param0 = 1;
5635 Param1 = Intrinsic::arm_mve_maxv_predicated;
5636 Param2 = false;
5637 break;
5638 case ARM::BI__builtin_arm_mve_vminvq_p_s32:
5639 Param0 = 0;
5640 Param1 = Intrinsic::arm_mve_minv_predicated;
5641 Param2 = true;
5642 break;
5643 case ARM::BI__builtin_arm_mve_vminvq_p_u32:
5644 Param0 = 1;
5645 Param1 = Intrinsic::arm_mve_minv_predicated;
5646 Param2 = false;
5647 break;
5648 }
5649 Value *Val0 = EmitScalarExpr(E->getArg(0));
5650 Value *Val1 = EmitScalarExpr(E->getArg(1));
5651 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
5652 Value *Val3 = EmitScalarExpr(E->getArg(2));
5653 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
5654 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
5655 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val1, Val2, Val5});
5656 return Builder.CreateIntCast(Val6, Int32Ty, Param2);
5657}
5658case ARM::BI__builtin_arm_mve_vcvtbq_m_f16_f32:
5659case ARM::BI__builtin_arm_mve_vcvtbq_m_f32_f16:
5660case ARM::BI__builtin_arm_mve_vcvttq_m_f16_f32:
5661case ARM::BI__builtin_arm_mve_vcvttq_m_f32_f16: {
5662 uint32_t Param0;
5663 Intrinsic::ID Param1;
5664 switch (BuiltinID) {
5665 case ARM::BI__builtin_arm_mve_vcvtbq_m_f16_f32:
5666 Param0 = 0;
5667 Param1 = Intrinsic::arm_mve_vcvt_narrow_predicated;
5668 break;
5669 case ARM::BI__builtin_arm_mve_vcvtbq_m_f32_f16:
5670 Param0 = 0;
5671 Param1 = Intrinsic::arm_mve_vcvt_widen_predicated;
5672 break;
5673 case ARM::BI__builtin_arm_mve_vcvttq_m_f16_f32:
5674 Param0 = 1;
5675 Param1 = Intrinsic::arm_mve_vcvt_narrow_predicated;
5676 break;
5677 case ARM::BI__builtin_arm_mve_vcvttq_m_f32_f16:
5678 Param0 = 1;
5679 Param1 = Intrinsic::arm_mve_vcvt_widen_predicated;
5680 break;
5681 }
5682 Value *Val0 = EmitScalarExpr(E->getArg(0));
5683 Value *Val1 = EmitScalarExpr(E->getArg(1));
5684 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
5685 Value *Val3 = EmitScalarExpr(E->getArg(2));
5686 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
5687 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
5688 return Builder.CreateCall(CGM.getIntrinsic(Param1), {Val0, Val1, Val2, Val5});
5689}
5690case ARM::BI__builtin_arm_mve_vqmovnbq_m_s16:
5691case ARM::BI__builtin_arm_mve_vqmovnbq_m_s32:
5692case ARM::BI__builtin_arm_mve_vqmovnbq_m_u16:
5693case ARM::BI__builtin_arm_mve_vqmovnbq_m_u32:
5694case ARM::BI__builtin_arm_mve_vqmovntq_m_s16:
5695case ARM::BI__builtin_arm_mve_vqmovntq_m_s32:
5696case ARM::BI__builtin_arm_mve_vqmovntq_m_u16:
5697case ARM::BI__builtin_arm_mve_vqmovntq_m_u32:
5698case ARM::BI__builtin_arm_mve_vqmovunbq_m_s16:
5699case ARM::BI__builtin_arm_mve_vqmovunbq_m_s32:
5700case ARM::BI__builtin_arm_mve_vqmovuntq_m_s16:
5701case ARM::BI__builtin_arm_mve_vqmovuntq_m_s32: {
5702 uint32_t Param0;
5703 uint32_t Param1;
5704 uint32_t Param2;
5705 llvm::Type * Param3;
5706 llvm::Type * Param4;
5707 llvm::Type * Param5;
5708 switch (BuiltinID) {
5709 case ARM::BI__builtin_arm_mve_vqmovnbq_m_s16:
5710 Param0 = 0;
5711 Param1 = 0;
5712 Param2 = 0;
5713 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5714 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5715 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5716 break;
5717 case ARM::BI__builtin_arm_mve_vqmovnbq_m_s32:
5718 Param0 = 0;
5719 Param1 = 0;
5720 Param2 = 0;
5721 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5722 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5723 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
5724 break;
5725 case ARM::BI__builtin_arm_mve_vqmovnbq_m_u16:
5726 Param0 = 1;
5727 Param1 = 1;
5728 Param2 = 0;
5729 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5730 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5731 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5732 break;
5733 case ARM::BI__builtin_arm_mve_vqmovnbq_m_u32:
5734 Param0 = 1;
5735 Param1 = 1;
5736 Param2 = 0;
5737 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5738 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5739 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
5740 break;
5741 case ARM::BI__builtin_arm_mve_vqmovntq_m_s16:
5742 Param0 = 0;
5743 Param1 = 0;
5744 Param2 = 1;
5745 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5746 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5747 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5748 break;
5749 case ARM::BI__builtin_arm_mve_vqmovntq_m_s32:
5750 Param0 = 0;
5751 Param1 = 0;
5752 Param2 = 1;
5753 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5754 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5755 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
5756 break;
5757 case ARM::BI__builtin_arm_mve_vqmovntq_m_u16:
5758 Param0 = 1;
5759 Param1 = 1;
5760 Param2 = 1;
5761 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5762 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5763 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5764 break;
5765 case ARM::BI__builtin_arm_mve_vqmovntq_m_u32:
5766 Param0 = 1;
5767 Param1 = 1;
5768 Param2 = 1;
5769 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5770 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5771 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
5772 break;
5773 case ARM::BI__builtin_arm_mve_vqmovunbq_m_s16:
5774 Param0 = 1;
5775 Param1 = 0;
5776 Param2 = 0;
5777 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5778 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5779 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5780 break;
5781 case ARM::BI__builtin_arm_mve_vqmovunbq_m_s32:
5782 Param0 = 1;
5783 Param1 = 0;
5784 Param2 = 0;
5785 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5786 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5787 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
5788 break;
5789 case ARM::BI__builtin_arm_mve_vqmovuntq_m_s16:
5790 Param0 = 1;
5791 Param1 = 0;
5792 Param2 = 1;
5793 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5794 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5795 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
5796 break;
5797 case ARM::BI__builtin_arm_mve_vqmovuntq_m_s32:
5798 Param0 = 1;
5799 Param1 = 0;
5800 Param2 = 1;
5801 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5802 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5803 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
5804 break;
5805 }
5806 Value *Val0 = EmitScalarExpr(E->getArg(0));
5807 Value *Val1 = EmitScalarExpr(E->getArg(1));
5808 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
5809 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
5810 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
5811 Value *Val5 = EmitScalarExpr(E->getArg(2));
5812 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
5813 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
5814 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqmovn_predicated, {Param4, Param5, Param3}), {Val0, Val1, Val2, Val3, Val4, Val7});
5815}
5816case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s16:
5817case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s32:
5818case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s8:
5819case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u16:
5820case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u32:
5821case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u8:
5822case ARM::BI__builtin_arm_mve_vqshlq_m_r_s16:
5823case ARM::BI__builtin_arm_mve_vqshlq_m_r_s32:
5824case ARM::BI__builtin_arm_mve_vqshlq_m_r_s8:
5825case ARM::BI__builtin_arm_mve_vqshlq_m_r_u16:
5826case ARM::BI__builtin_arm_mve_vqshlq_m_r_u32:
5827case ARM::BI__builtin_arm_mve_vqshlq_m_r_u8:
5828case ARM::BI__builtin_arm_mve_vrshlq_m_n_s16:
5829case ARM::BI__builtin_arm_mve_vrshlq_m_n_s32:
5830case ARM::BI__builtin_arm_mve_vrshlq_m_n_s8:
5831case ARM::BI__builtin_arm_mve_vrshlq_m_n_u16:
5832case ARM::BI__builtin_arm_mve_vrshlq_m_n_u32:
5833case ARM::BI__builtin_arm_mve_vrshlq_m_n_u8:
5834case ARM::BI__builtin_arm_mve_vshlq_m_r_s16:
5835case ARM::BI__builtin_arm_mve_vshlq_m_r_s32:
5836case ARM::BI__builtin_arm_mve_vshlq_m_r_s8:
5837case ARM::BI__builtin_arm_mve_vshlq_m_r_u16:
5838case ARM::BI__builtin_arm_mve_vshlq_m_r_u32:
5839case ARM::BI__builtin_arm_mve_vshlq_m_r_u8: {
5840 uint32_t Param0;
5841 uint32_t Param1;
5842 uint32_t Param2;
5843 llvm::Type * Param3;
5844 llvm::Type * Param4;
5845 switch (BuiltinID) {
5846 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s16:
5847 Param0 = 1;
5848 Param1 = 1;
5849 Param2 = 0;
5850 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5851 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5852 break;
5853 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s32:
5854 Param0 = 1;
5855 Param1 = 1;
5856 Param2 = 0;
5857 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5858 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5859 break;
5860 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_s8:
5861 Param0 = 1;
5862 Param1 = 1;
5863 Param2 = 0;
5864 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5865 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5866 break;
5867 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u16:
5868 Param0 = 1;
5869 Param1 = 1;
5870 Param2 = 1;
5871 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5872 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5873 break;
5874 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u32:
5875 Param0 = 1;
5876 Param1 = 1;
5877 Param2 = 1;
5878 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5879 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5880 break;
5881 case ARM::BI__builtin_arm_mve_vqrshlq_m_n_u8:
5882 Param0 = 1;
5883 Param1 = 1;
5884 Param2 = 1;
5885 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5886 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5887 break;
5888 case ARM::BI__builtin_arm_mve_vqshlq_m_r_s16:
5889 Param0 = 1;
5890 Param1 = 0;
5891 Param2 = 0;
5892 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5893 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5894 break;
5895 case ARM::BI__builtin_arm_mve_vqshlq_m_r_s32:
5896 Param0 = 1;
5897 Param1 = 0;
5898 Param2 = 0;
5899 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5900 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5901 break;
5902 case ARM::BI__builtin_arm_mve_vqshlq_m_r_s8:
5903 Param0 = 1;
5904 Param1 = 0;
5905 Param2 = 0;
5906 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5907 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5908 break;
5909 case ARM::BI__builtin_arm_mve_vqshlq_m_r_u16:
5910 Param0 = 1;
5911 Param1 = 0;
5912 Param2 = 1;
5913 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5914 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5915 break;
5916 case ARM::BI__builtin_arm_mve_vqshlq_m_r_u32:
5917 Param0 = 1;
5918 Param1 = 0;
5919 Param2 = 1;
5920 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5921 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5922 break;
5923 case ARM::BI__builtin_arm_mve_vqshlq_m_r_u8:
5924 Param0 = 1;
5925 Param1 = 0;
5926 Param2 = 1;
5927 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5928 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5929 break;
5930 case ARM::BI__builtin_arm_mve_vrshlq_m_n_s16:
5931 Param0 = 0;
5932 Param1 = 1;
5933 Param2 = 0;
5934 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5935 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5936 break;
5937 case ARM::BI__builtin_arm_mve_vrshlq_m_n_s32:
5938 Param0 = 0;
5939 Param1 = 1;
5940 Param2 = 0;
5941 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5942 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5943 break;
5944 case ARM::BI__builtin_arm_mve_vrshlq_m_n_s8:
5945 Param0 = 0;
5946 Param1 = 1;
5947 Param2 = 0;
5948 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5949 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5950 break;
5951 case ARM::BI__builtin_arm_mve_vrshlq_m_n_u16:
5952 Param0 = 0;
5953 Param1 = 1;
5954 Param2 = 1;
5955 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5956 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5957 break;
5958 case ARM::BI__builtin_arm_mve_vrshlq_m_n_u32:
5959 Param0 = 0;
5960 Param1 = 1;
5961 Param2 = 1;
5962 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5963 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5964 break;
5965 case ARM::BI__builtin_arm_mve_vrshlq_m_n_u8:
5966 Param0 = 0;
5967 Param1 = 1;
5968 Param2 = 1;
5969 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5970 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5971 break;
5972 case ARM::BI__builtin_arm_mve_vshlq_m_r_s16:
5973 Param0 = 0;
5974 Param1 = 0;
5975 Param2 = 0;
5976 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5977 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5978 break;
5979 case ARM::BI__builtin_arm_mve_vshlq_m_r_s32:
5980 Param0 = 0;
5981 Param1 = 0;
5982 Param2 = 0;
5983 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
5984 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
5985 break;
5986 case ARM::BI__builtin_arm_mve_vshlq_m_r_s8:
5987 Param0 = 0;
5988 Param1 = 0;
5989 Param2 = 0;
5990 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
5991 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
5992 break;
5993 case ARM::BI__builtin_arm_mve_vshlq_m_r_u16:
5994 Param0 = 0;
5995 Param1 = 0;
5996 Param2 = 1;
5997 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
5998 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
5999 break;
6000 case ARM::BI__builtin_arm_mve_vshlq_m_r_u32:
6001 Param0 = 0;
6002 Param1 = 0;
6003 Param2 = 1;
6004 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
6005 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6006 break;
6007 case ARM::BI__builtin_arm_mve_vshlq_m_r_u8:
6008 Param0 = 0;
6009 Param1 = 0;
6010 Param2 = 1;
6011 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
6012 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6013 break;
6014 }
6015 Value *Val0 = EmitScalarExpr(E->getArg(0));
6016 Value *Val1 = EmitScalarExpr(E->getArg(1));
6017 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
6018 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
6019 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
6020 Value *Val5 = EmitScalarExpr(E->getArg(2));
6021 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
6022 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
6023 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_scalar_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val7});
6024}
6025case ARM::BI__builtin_arm_mve_vqrshlq_n_s16:
6026case ARM::BI__builtin_arm_mve_vqrshlq_n_s32:
6027case ARM::BI__builtin_arm_mve_vqrshlq_n_s8:
6028case ARM::BI__builtin_arm_mve_vqrshlq_n_u16:
6029case ARM::BI__builtin_arm_mve_vqrshlq_n_u32:
6030case ARM::BI__builtin_arm_mve_vqrshlq_n_u8:
6031case ARM::BI__builtin_arm_mve_vqshlq_r_s16:
6032case ARM::BI__builtin_arm_mve_vqshlq_r_s32:
6033case ARM::BI__builtin_arm_mve_vqshlq_r_s8:
6034case ARM::BI__builtin_arm_mve_vqshlq_r_u16:
6035case ARM::BI__builtin_arm_mve_vqshlq_r_u32:
6036case ARM::BI__builtin_arm_mve_vqshlq_r_u8:
6037case ARM::BI__builtin_arm_mve_vrshlq_n_s16:
6038case ARM::BI__builtin_arm_mve_vrshlq_n_s32:
6039case ARM::BI__builtin_arm_mve_vrshlq_n_s8:
6040case ARM::BI__builtin_arm_mve_vrshlq_n_u16:
6041case ARM::BI__builtin_arm_mve_vrshlq_n_u32:
6042case ARM::BI__builtin_arm_mve_vrshlq_n_u8:
6043case ARM::BI__builtin_arm_mve_vshlq_r_s16:
6044case ARM::BI__builtin_arm_mve_vshlq_r_s32:
6045case ARM::BI__builtin_arm_mve_vshlq_r_s8:
6046case ARM::BI__builtin_arm_mve_vshlq_r_u16:
6047case ARM::BI__builtin_arm_mve_vshlq_r_u32:
6048case ARM::BI__builtin_arm_mve_vshlq_r_u8: {
6049 uint32_t Param0;
6050 uint32_t Param1;
6051 uint32_t Param2;
6052 llvm::Type * Param3;
6053 switch (BuiltinID) {
6054 case ARM::BI__builtin_arm_mve_vqrshlq_n_s16:
6055 Param0 = 1;
6056 Param1 = 1;
6057 Param2 = 0;
6058 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6059 break;
6060 case ARM::BI__builtin_arm_mve_vqrshlq_n_s32:
6061 Param0 = 1;
6062 Param1 = 1;
6063 Param2 = 0;
6064 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6065 break;
6066 case ARM::BI__builtin_arm_mve_vqrshlq_n_s8:
6067 Param0 = 1;
6068 Param1 = 1;
6069 Param2 = 0;
6070 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6071 break;
6072 case ARM::BI__builtin_arm_mve_vqrshlq_n_u16:
6073 Param0 = 1;
6074 Param1 = 1;
6075 Param2 = 1;
6076 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6077 break;
6078 case ARM::BI__builtin_arm_mve_vqrshlq_n_u32:
6079 Param0 = 1;
6080 Param1 = 1;
6081 Param2 = 1;
6082 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6083 break;
6084 case ARM::BI__builtin_arm_mve_vqrshlq_n_u8:
6085 Param0 = 1;
6086 Param1 = 1;
6087 Param2 = 1;
6088 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6089 break;
6090 case ARM::BI__builtin_arm_mve_vqshlq_r_s16:
6091 Param0 = 1;
6092 Param1 = 0;
6093 Param2 = 0;
6094 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6095 break;
6096 case ARM::BI__builtin_arm_mve_vqshlq_r_s32:
6097 Param0 = 1;
6098 Param1 = 0;
6099 Param2 = 0;
6100 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6101 break;
6102 case ARM::BI__builtin_arm_mve_vqshlq_r_s8:
6103 Param0 = 1;
6104 Param1 = 0;
6105 Param2 = 0;
6106 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6107 break;
6108 case ARM::BI__builtin_arm_mve_vqshlq_r_u16:
6109 Param0 = 1;
6110 Param1 = 0;
6111 Param2 = 1;
6112 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6113 break;
6114 case ARM::BI__builtin_arm_mve_vqshlq_r_u32:
6115 Param0 = 1;
6116 Param1 = 0;
6117 Param2 = 1;
6118 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6119 break;
6120 case ARM::BI__builtin_arm_mve_vqshlq_r_u8:
6121 Param0 = 1;
6122 Param1 = 0;
6123 Param2 = 1;
6124 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6125 break;
6126 case ARM::BI__builtin_arm_mve_vrshlq_n_s16:
6127 Param0 = 0;
6128 Param1 = 1;
6129 Param2 = 0;
6130 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6131 break;
6132 case ARM::BI__builtin_arm_mve_vrshlq_n_s32:
6133 Param0 = 0;
6134 Param1 = 1;
6135 Param2 = 0;
6136 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6137 break;
6138 case ARM::BI__builtin_arm_mve_vrshlq_n_s8:
6139 Param0 = 0;
6140 Param1 = 1;
6141 Param2 = 0;
6142 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6143 break;
6144 case ARM::BI__builtin_arm_mve_vrshlq_n_u16:
6145 Param0 = 0;
6146 Param1 = 1;
6147 Param2 = 1;
6148 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6149 break;
6150 case ARM::BI__builtin_arm_mve_vrshlq_n_u32:
6151 Param0 = 0;
6152 Param1 = 1;
6153 Param2 = 1;
6154 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6155 break;
6156 case ARM::BI__builtin_arm_mve_vrshlq_n_u8:
6157 Param0 = 0;
6158 Param1 = 1;
6159 Param2 = 1;
6160 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6161 break;
6162 case ARM::BI__builtin_arm_mve_vshlq_r_s16:
6163 Param0 = 0;
6164 Param1 = 0;
6165 Param2 = 0;
6166 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6167 break;
6168 case ARM::BI__builtin_arm_mve_vshlq_r_s32:
6169 Param0 = 0;
6170 Param1 = 0;
6171 Param2 = 0;
6172 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6173 break;
6174 case ARM::BI__builtin_arm_mve_vshlq_r_s8:
6175 Param0 = 0;
6176 Param1 = 0;
6177 Param2 = 0;
6178 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6179 break;
6180 case ARM::BI__builtin_arm_mve_vshlq_r_u16:
6181 Param0 = 0;
6182 Param1 = 0;
6183 Param2 = 1;
6184 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6185 break;
6186 case ARM::BI__builtin_arm_mve_vshlq_r_u32:
6187 Param0 = 0;
6188 Param1 = 0;
6189 Param2 = 1;
6190 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6191 break;
6192 case ARM::BI__builtin_arm_mve_vshlq_r_u8:
6193 Param0 = 0;
6194 Param1 = 0;
6195 Param2 = 1;
6196 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6197 break;
6198 }
6199 Value *Val0 = EmitScalarExpr(E->getArg(0));
6200 Value *Val1 = EmitScalarExpr(E->getArg(1));
6201 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
6202 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
6203 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
6204 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_scalar, {Param3}), {Val0, Val1, Val2, Val3, Val4});
6205}
6206case ARM::BI__builtin_arm_mve_vqmovnbq_s16:
6207case ARM::BI__builtin_arm_mve_vqmovnbq_s32:
6208case ARM::BI__builtin_arm_mve_vqmovnbq_u16:
6209case ARM::BI__builtin_arm_mve_vqmovnbq_u32:
6210case ARM::BI__builtin_arm_mve_vqmovntq_s16:
6211case ARM::BI__builtin_arm_mve_vqmovntq_s32:
6212case ARM::BI__builtin_arm_mve_vqmovntq_u16:
6213case ARM::BI__builtin_arm_mve_vqmovntq_u32:
6214case ARM::BI__builtin_arm_mve_vqmovunbq_s16:
6215case ARM::BI__builtin_arm_mve_vqmovunbq_s32:
6216case ARM::BI__builtin_arm_mve_vqmovuntq_s16:
6217case ARM::BI__builtin_arm_mve_vqmovuntq_s32:
6218case ARM::BI__builtin_arm_mve_vqrshlq_s16:
6219case ARM::BI__builtin_arm_mve_vqrshlq_s32:
6220case ARM::BI__builtin_arm_mve_vqrshlq_s8:
6221case ARM::BI__builtin_arm_mve_vqrshlq_u16:
6222case ARM::BI__builtin_arm_mve_vqrshlq_u32:
6223case ARM::BI__builtin_arm_mve_vqrshlq_u8:
6224case ARM::BI__builtin_arm_mve_vqshlq_s16:
6225case ARM::BI__builtin_arm_mve_vqshlq_s32:
6226case ARM::BI__builtin_arm_mve_vqshlq_s8:
6227case ARM::BI__builtin_arm_mve_vqshlq_u16:
6228case ARM::BI__builtin_arm_mve_vqshlq_u32:
6229case ARM::BI__builtin_arm_mve_vqshlq_u8:
6230case ARM::BI__builtin_arm_mve_vrshlq_s16:
6231case ARM::BI__builtin_arm_mve_vrshlq_s32:
6232case ARM::BI__builtin_arm_mve_vrshlq_s8:
6233case ARM::BI__builtin_arm_mve_vrshlq_u16:
6234case ARM::BI__builtin_arm_mve_vrshlq_u32:
6235case ARM::BI__builtin_arm_mve_vrshlq_u8:
6236case ARM::BI__builtin_arm_mve_vshlq_s16:
6237case ARM::BI__builtin_arm_mve_vshlq_s32:
6238case ARM::BI__builtin_arm_mve_vshlq_s8:
6239case ARM::BI__builtin_arm_mve_vshlq_u16:
6240case ARM::BI__builtin_arm_mve_vshlq_u32:
6241case ARM::BI__builtin_arm_mve_vshlq_u8: {
6242 uint32_t Param0;
6243 uint32_t Param1;
6244 uint32_t Param2;
6245 Intrinsic::ID Param3;
6246 llvm::Type * Param4;
6247 llvm::Type * Param5;
6248 switch (BuiltinID) {
6249 case ARM::BI__builtin_arm_mve_vqmovnbq_s16:
6250 Param0 = 0;
6251 Param1 = 0;
6252 Param2 = 0;
6253 Param3 = Intrinsic::arm_mve_vqmovn;
6254 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6255 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6256 break;
6257 case ARM::BI__builtin_arm_mve_vqmovnbq_s32:
6258 Param0 = 0;
6259 Param1 = 0;
6260 Param2 = 0;
6261 Param3 = Intrinsic::arm_mve_vqmovn;
6262 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6263 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6264 break;
6265 case ARM::BI__builtin_arm_mve_vqmovnbq_u16:
6266 Param0 = 1;
6267 Param1 = 1;
6268 Param2 = 0;
6269 Param3 = Intrinsic::arm_mve_vqmovn;
6270 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6271 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6272 break;
6273 case ARM::BI__builtin_arm_mve_vqmovnbq_u32:
6274 Param0 = 1;
6275 Param1 = 1;
6276 Param2 = 0;
6277 Param3 = Intrinsic::arm_mve_vqmovn;
6278 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6279 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6280 break;
6281 case ARM::BI__builtin_arm_mve_vqmovntq_s16:
6282 Param0 = 0;
6283 Param1 = 0;
6284 Param2 = 1;
6285 Param3 = Intrinsic::arm_mve_vqmovn;
6286 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6287 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6288 break;
6289 case ARM::BI__builtin_arm_mve_vqmovntq_s32:
6290 Param0 = 0;
6291 Param1 = 0;
6292 Param2 = 1;
6293 Param3 = Intrinsic::arm_mve_vqmovn;
6294 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6295 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6296 break;
6297 case ARM::BI__builtin_arm_mve_vqmovntq_u16:
6298 Param0 = 1;
6299 Param1 = 1;
6300 Param2 = 1;
6301 Param3 = Intrinsic::arm_mve_vqmovn;
6302 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6303 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6304 break;
6305 case ARM::BI__builtin_arm_mve_vqmovntq_u32:
6306 Param0 = 1;
6307 Param1 = 1;
6308 Param2 = 1;
6309 Param3 = Intrinsic::arm_mve_vqmovn;
6310 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6311 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6312 break;
6313 case ARM::BI__builtin_arm_mve_vqmovunbq_s16:
6314 Param0 = 1;
6315 Param1 = 0;
6316 Param2 = 0;
6317 Param3 = Intrinsic::arm_mve_vqmovn;
6318 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6319 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6320 break;
6321 case ARM::BI__builtin_arm_mve_vqmovunbq_s32:
6322 Param0 = 1;
6323 Param1 = 0;
6324 Param2 = 0;
6325 Param3 = Intrinsic::arm_mve_vqmovn;
6326 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6327 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6328 break;
6329 case ARM::BI__builtin_arm_mve_vqmovuntq_s16:
6330 Param0 = 1;
6331 Param1 = 0;
6332 Param2 = 1;
6333 Param3 = Intrinsic::arm_mve_vqmovn;
6334 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6335 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6336 break;
6337 case ARM::BI__builtin_arm_mve_vqmovuntq_s32:
6338 Param0 = 1;
6339 Param1 = 0;
6340 Param2 = 1;
6341 Param3 = Intrinsic::arm_mve_vqmovn;
6342 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6343 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6344 break;
6345 case ARM::BI__builtin_arm_mve_vqrshlq_s16:
6346 Param0 = 1;
6347 Param1 = 1;
6348 Param2 = 0;
6349 Param3 = Intrinsic::arm_mve_vshl_vector;
6350 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6351 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6352 break;
6353 case ARM::BI__builtin_arm_mve_vqrshlq_s32:
6354 Param0 = 1;
6355 Param1 = 1;
6356 Param2 = 0;
6357 Param3 = Intrinsic::arm_mve_vshl_vector;
6358 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6359 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6360 break;
6361 case ARM::BI__builtin_arm_mve_vqrshlq_s8:
6362 Param0 = 1;
6363 Param1 = 1;
6364 Param2 = 0;
6365 Param3 = Intrinsic::arm_mve_vshl_vector;
6366 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6367 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6368 break;
6369 case ARM::BI__builtin_arm_mve_vqrshlq_u16:
6370 Param0 = 1;
6371 Param1 = 1;
6372 Param2 = 1;
6373 Param3 = Intrinsic::arm_mve_vshl_vector;
6374 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6375 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6376 break;
6377 case ARM::BI__builtin_arm_mve_vqrshlq_u32:
6378 Param0 = 1;
6379 Param1 = 1;
6380 Param2 = 1;
6381 Param3 = Intrinsic::arm_mve_vshl_vector;
6382 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6383 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6384 break;
6385 case ARM::BI__builtin_arm_mve_vqrshlq_u8:
6386 Param0 = 1;
6387 Param1 = 1;
6388 Param2 = 1;
6389 Param3 = Intrinsic::arm_mve_vshl_vector;
6390 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6391 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6392 break;
6393 case ARM::BI__builtin_arm_mve_vqshlq_s16:
6394 Param0 = 1;
6395 Param1 = 0;
6396 Param2 = 0;
6397 Param3 = Intrinsic::arm_mve_vshl_vector;
6398 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6399 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6400 break;
6401 case ARM::BI__builtin_arm_mve_vqshlq_s32:
6402 Param0 = 1;
6403 Param1 = 0;
6404 Param2 = 0;
6405 Param3 = Intrinsic::arm_mve_vshl_vector;
6406 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6407 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6408 break;
6409 case ARM::BI__builtin_arm_mve_vqshlq_s8:
6410 Param0 = 1;
6411 Param1 = 0;
6412 Param2 = 0;
6413 Param3 = Intrinsic::arm_mve_vshl_vector;
6414 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6415 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6416 break;
6417 case ARM::BI__builtin_arm_mve_vqshlq_u16:
6418 Param0 = 1;
6419 Param1 = 0;
6420 Param2 = 1;
6421 Param3 = Intrinsic::arm_mve_vshl_vector;
6422 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6423 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6424 break;
6425 case ARM::BI__builtin_arm_mve_vqshlq_u32:
6426 Param0 = 1;
6427 Param1 = 0;
6428 Param2 = 1;
6429 Param3 = Intrinsic::arm_mve_vshl_vector;
6430 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6431 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6432 break;
6433 case ARM::BI__builtin_arm_mve_vqshlq_u8:
6434 Param0 = 1;
6435 Param1 = 0;
6436 Param2 = 1;
6437 Param3 = Intrinsic::arm_mve_vshl_vector;
6438 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6439 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6440 break;
6441 case ARM::BI__builtin_arm_mve_vrshlq_s16:
6442 Param0 = 0;
6443 Param1 = 1;
6444 Param2 = 0;
6445 Param3 = Intrinsic::arm_mve_vshl_vector;
6446 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6447 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6448 break;
6449 case ARM::BI__builtin_arm_mve_vrshlq_s32:
6450 Param0 = 0;
6451 Param1 = 1;
6452 Param2 = 0;
6453 Param3 = Intrinsic::arm_mve_vshl_vector;
6454 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6455 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6456 break;
6457 case ARM::BI__builtin_arm_mve_vrshlq_s8:
6458 Param0 = 0;
6459 Param1 = 1;
6460 Param2 = 0;
6461 Param3 = Intrinsic::arm_mve_vshl_vector;
6462 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6463 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6464 break;
6465 case ARM::BI__builtin_arm_mve_vrshlq_u16:
6466 Param0 = 0;
6467 Param1 = 1;
6468 Param2 = 1;
6469 Param3 = Intrinsic::arm_mve_vshl_vector;
6470 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6471 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6472 break;
6473 case ARM::BI__builtin_arm_mve_vrshlq_u32:
6474 Param0 = 0;
6475 Param1 = 1;
6476 Param2 = 1;
6477 Param3 = Intrinsic::arm_mve_vshl_vector;
6478 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6479 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6480 break;
6481 case ARM::BI__builtin_arm_mve_vrshlq_u8:
6482 Param0 = 0;
6483 Param1 = 1;
6484 Param2 = 1;
6485 Param3 = Intrinsic::arm_mve_vshl_vector;
6486 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6487 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6488 break;
6489 case ARM::BI__builtin_arm_mve_vshlq_s16:
6490 Param0 = 0;
6491 Param1 = 0;
6492 Param2 = 0;
6493 Param3 = Intrinsic::arm_mve_vshl_vector;
6494 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6495 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6496 break;
6497 case ARM::BI__builtin_arm_mve_vshlq_s32:
6498 Param0 = 0;
6499 Param1 = 0;
6500 Param2 = 0;
6501 Param3 = Intrinsic::arm_mve_vshl_vector;
6502 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6503 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6504 break;
6505 case ARM::BI__builtin_arm_mve_vshlq_s8:
6506 Param0 = 0;
6507 Param1 = 0;
6508 Param2 = 0;
6509 Param3 = Intrinsic::arm_mve_vshl_vector;
6510 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6511 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6512 break;
6513 case ARM::BI__builtin_arm_mve_vshlq_u16:
6514 Param0 = 0;
6515 Param1 = 0;
6516 Param2 = 1;
6517 Param3 = Intrinsic::arm_mve_vshl_vector;
6518 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6519 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
6520 break;
6521 case ARM::BI__builtin_arm_mve_vshlq_u32:
6522 Param0 = 0;
6523 Param1 = 0;
6524 Param2 = 1;
6525 Param3 = Intrinsic::arm_mve_vshl_vector;
6526 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6527 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
6528 break;
6529 case ARM::BI__builtin_arm_mve_vshlq_u8:
6530 Param0 = 0;
6531 Param1 = 0;
6532 Param2 = 1;
6533 Param3 = Intrinsic::arm_mve_vshl_vector;
6534 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6535 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
6536 break;
6537 }
6538 Value *Val0 = EmitScalarExpr(E->getArg(0));
6539 Value *Val1 = EmitScalarExpr(E->getArg(1));
6540 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
6541 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
6542 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
6543 return Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4, Param5}), {Val0, Val1, Val2, Val3, Val4});
6544}
6545case ARM::BI__builtin_arm_mve_vmullbq_int_s16:
6546case ARM::BI__builtin_arm_mve_vmullbq_int_s32:
6547case ARM::BI__builtin_arm_mve_vmullbq_int_s8:
6548case ARM::BI__builtin_arm_mve_vmullbq_int_u16:
6549case ARM::BI__builtin_arm_mve_vmullbq_int_u32:
6550case ARM::BI__builtin_arm_mve_vmullbq_int_u8:
6551case ARM::BI__builtin_arm_mve_vmulltq_int_s16:
6552case ARM::BI__builtin_arm_mve_vmulltq_int_s32:
6553case ARM::BI__builtin_arm_mve_vmulltq_int_s8:
6554case ARM::BI__builtin_arm_mve_vmulltq_int_u16:
6555case ARM::BI__builtin_arm_mve_vmulltq_int_u32:
6556case ARM::BI__builtin_arm_mve_vmulltq_int_u8:
6557case ARM::BI__builtin_arm_mve_vshllbq_n_s16:
6558case ARM::BI__builtin_arm_mve_vshllbq_n_s8:
6559case ARM::BI__builtin_arm_mve_vshllbq_n_u16:
6560case ARM::BI__builtin_arm_mve_vshllbq_n_u8:
6561case ARM::BI__builtin_arm_mve_vshlltq_n_s16:
6562case ARM::BI__builtin_arm_mve_vshlltq_n_s8:
6563case ARM::BI__builtin_arm_mve_vshlltq_n_u16:
6564case ARM::BI__builtin_arm_mve_vshlltq_n_u8: {
6565 uint32_t Param0;
6566 uint32_t Param1;
6567 Intrinsic::ID Param2;
6568 llvm::Type * Param3;
6569 llvm::Type * Param4;
6570 switch (BuiltinID) {
6571 case ARM::BI__builtin_arm_mve_vmullbq_int_s16:
6572 Param0 = 0;
6573 Param1 = 0;
6574 Param2 = Intrinsic::arm_mve_vmull;
6575 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6576 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6577 break;
6578 case ARM::BI__builtin_arm_mve_vmullbq_int_s32:
6579 Param0 = 0;
6580 Param1 = 0;
6581 Param2 = Intrinsic::arm_mve_vmull;
6582 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
6583 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6584 break;
6585 case ARM::BI__builtin_arm_mve_vmullbq_int_s8:
6586 Param0 = 0;
6587 Param1 = 0;
6588 Param2 = Intrinsic::arm_mve_vmull;
6589 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6590 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6591 break;
6592 case ARM::BI__builtin_arm_mve_vmullbq_int_u16:
6593 Param0 = 1;
6594 Param1 = 0;
6595 Param2 = Intrinsic::arm_mve_vmull;
6596 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6597 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6598 break;
6599 case ARM::BI__builtin_arm_mve_vmullbq_int_u32:
6600 Param0 = 1;
6601 Param1 = 0;
6602 Param2 = Intrinsic::arm_mve_vmull;
6603 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
6604 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6605 break;
6606 case ARM::BI__builtin_arm_mve_vmullbq_int_u8:
6607 Param0 = 1;
6608 Param1 = 0;
6609 Param2 = Intrinsic::arm_mve_vmull;
6610 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6611 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6612 break;
6613 case ARM::BI__builtin_arm_mve_vmulltq_int_s16:
6614 Param0 = 0;
6615 Param1 = 1;
6616 Param2 = Intrinsic::arm_mve_vmull;
6617 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6618 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6619 break;
6620 case ARM::BI__builtin_arm_mve_vmulltq_int_s32:
6621 Param0 = 0;
6622 Param1 = 1;
6623 Param2 = Intrinsic::arm_mve_vmull;
6624 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
6625 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6626 break;
6627 case ARM::BI__builtin_arm_mve_vmulltq_int_s8:
6628 Param0 = 0;
6629 Param1 = 1;
6630 Param2 = Intrinsic::arm_mve_vmull;
6631 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6632 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6633 break;
6634 case ARM::BI__builtin_arm_mve_vmulltq_int_u16:
6635 Param0 = 1;
6636 Param1 = 1;
6637 Param2 = Intrinsic::arm_mve_vmull;
6638 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6639 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6640 break;
6641 case ARM::BI__builtin_arm_mve_vmulltq_int_u32:
6642 Param0 = 1;
6643 Param1 = 1;
6644 Param2 = Intrinsic::arm_mve_vmull;
6645 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
6646 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
6647 break;
6648 case ARM::BI__builtin_arm_mve_vmulltq_int_u8:
6649 Param0 = 1;
6650 Param1 = 1;
6651 Param2 = Intrinsic::arm_mve_vmull;
6652 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6653 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6654 break;
6655 case ARM::BI__builtin_arm_mve_vshllbq_n_s16:
6656 Param0 = 0;
6657 Param1 = 0;
6658 Param2 = Intrinsic::arm_mve_vshll_imm;
6659 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6660 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6661 break;
6662 case ARM::BI__builtin_arm_mve_vshllbq_n_s8:
6663 Param0 = 0;
6664 Param1 = 0;
6665 Param2 = Intrinsic::arm_mve_vshll_imm;
6666 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6667 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6668 break;
6669 case ARM::BI__builtin_arm_mve_vshllbq_n_u16:
6670 Param0 = 1;
6671 Param1 = 0;
6672 Param2 = Intrinsic::arm_mve_vshll_imm;
6673 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6674 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6675 break;
6676 case ARM::BI__builtin_arm_mve_vshllbq_n_u8:
6677 Param0 = 1;
6678 Param1 = 0;
6679 Param2 = Intrinsic::arm_mve_vshll_imm;
6680 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6681 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6682 break;
6683 case ARM::BI__builtin_arm_mve_vshlltq_n_s16:
6684 Param0 = 0;
6685 Param1 = 1;
6686 Param2 = Intrinsic::arm_mve_vshll_imm;
6687 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6688 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6689 break;
6690 case ARM::BI__builtin_arm_mve_vshlltq_n_s8:
6691 Param0 = 0;
6692 Param1 = 1;
6693 Param2 = Intrinsic::arm_mve_vshll_imm;
6694 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6695 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6696 break;
6697 case ARM::BI__builtin_arm_mve_vshlltq_n_u16:
6698 Param0 = 1;
6699 Param1 = 1;
6700 Param2 = Intrinsic::arm_mve_vshll_imm;
6701 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6702 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
6703 break;
6704 case ARM::BI__builtin_arm_mve_vshlltq_n_u8:
6705 Param0 = 1;
6706 Param1 = 1;
6707 Param2 = Intrinsic::arm_mve_vshll_imm;
6708 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6709 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
6710 break;
6711 }
6712 Value *Val0 = EmitScalarExpr(E->getArg(0));
6713 Value *Val1 = EmitScalarExpr(E->getArg(1));
6714 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
6715 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
6716 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param4}), {Val0, Val1, Val2, Val3});
6717}
6718case ARM::BI__builtin_arm_mve_vcvtbq_f16_f32:
6719case ARM::BI__builtin_arm_mve_vcvttq_f16_f32: {
6720 uint32_t Param0;
6721 switch (BuiltinID) {
6722 case ARM::BI__builtin_arm_mve_vcvtbq_f16_f32:
6723 Param0 = 0;
6724 break;
6725 case ARM::BI__builtin_arm_mve_vcvttq_f16_f32:
6726 Param0 = 1;
6727 break;
6728 }
6729 Value *Val0 = EmitScalarExpr(E->getArg(0));
6730 Value *Val1 = EmitScalarExpr(E->getArg(1));
6731 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
6732 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_narrow), {Val0, Val1, Val2});
6733}
6734case ARM::BI__builtin_arm_mve_vmullbq_poly_p16:
6735case ARM::BI__builtin_arm_mve_vmullbq_poly_p8:
6736case ARM::BI__builtin_arm_mve_vmulltq_poly_p16:
6737case ARM::BI__builtin_arm_mve_vmulltq_poly_p8:
6738case ARM::BI__builtin_arm_mve_vqdmullbq_s16:
6739case ARM::BI__builtin_arm_mve_vqdmullbq_s32:
6740case ARM::BI__builtin_arm_mve_vqdmulltq_s16:
6741case ARM::BI__builtin_arm_mve_vqdmulltq_s32: {
6742 uint32_t Param0;
6743 Intrinsic::ID Param1;
6744 llvm::Type * Param2;
6745 llvm::Type * Param3;
6746 switch (BuiltinID) {
6747 case ARM::BI__builtin_arm_mve_vmullbq_poly_p16:
6748 Param0 = 0;
6749 Param1 = Intrinsic::arm_mve_vmull_poly;
6750 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6751 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6752 break;
6753 case ARM::BI__builtin_arm_mve_vmullbq_poly_p8:
6754 Param0 = 0;
6755 Param1 = Intrinsic::arm_mve_vmull_poly;
6756 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6757 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6758 break;
6759 case ARM::BI__builtin_arm_mve_vmulltq_poly_p16:
6760 Param0 = 1;
6761 Param1 = Intrinsic::arm_mve_vmull_poly;
6762 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6763 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6764 break;
6765 case ARM::BI__builtin_arm_mve_vmulltq_poly_p8:
6766 Param0 = 1;
6767 Param1 = Intrinsic::arm_mve_vmull_poly;
6768 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6769 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
6770 break;
6771 case ARM::BI__builtin_arm_mve_vqdmullbq_s16:
6772 Param0 = 0;
6773 Param1 = Intrinsic::arm_mve_vqdmull;
6774 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6775 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6776 break;
6777 case ARM::BI__builtin_arm_mve_vqdmullbq_s32:
6778 Param0 = 0;
6779 Param1 = Intrinsic::arm_mve_vqdmull;
6780 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
6781 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6782 break;
6783 case ARM::BI__builtin_arm_mve_vqdmulltq_s16:
6784 Param0 = 1;
6785 Param1 = Intrinsic::arm_mve_vqdmull;
6786 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6787 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
6788 break;
6789 case ARM::BI__builtin_arm_mve_vqdmulltq_s32:
6790 Param0 = 1;
6791 Param1 = Intrinsic::arm_mve_vqdmull;
6792 Param2 = llvm::FixedVectorType::get(Int64Ty, 2);
6793 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
6794 break;
6795 }
6796 Value *Val0 = EmitScalarExpr(E->getArg(0));
6797 Value *Val1 = EmitScalarExpr(E->getArg(1));
6798 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
6799 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param3}), {Val0, Val1, Val2});
6800}
6801case ARM::BI__builtin_arm_mve_vabdq_f16:
6802case ARM::BI__builtin_arm_mve_vabdq_f32:
6803case ARM::BI__builtin_arm_mve_vabdq_s16:
6804case ARM::BI__builtin_arm_mve_vabdq_s32:
6805case ARM::BI__builtin_arm_mve_vabdq_s8:
6806case ARM::BI__builtin_arm_mve_vabdq_u16:
6807case ARM::BI__builtin_arm_mve_vabdq_u32:
6808case ARM::BI__builtin_arm_mve_vabdq_u8:
6809case ARM::BI__builtin_arm_mve_vhaddq_s16:
6810case ARM::BI__builtin_arm_mve_vhaddq_s32:
6811case ARM::BI__builtin_arm_mve_vhaddq_s8:
6812case ARM::BI__builtin_arm_mve_vhaddq_u16:
6813case ARM::BI__builtin_arm_mve_vhaddq_u32:
6814case ARM::BI__builtin_arm_mve_vhaddq_u8:
6815case ARM::BI__builtin_arm_mve_vhsubq_s16:
6816case ARM::BI__builtin_arm_mve_vhsubq_s32:
6817case ARM::BI__builtin_arm_mve_vhsubq_s8:
6818case ARM::BI__builtin_arm_mve_vhsubq_u16:
6819case ARM::BI__builtin_arm_mve_vhsubq_u32:
6820case ARM::BI__builtin_arm_mve_vhsubq_u8:
6821case ARM::BI__builtin_arm_mve_vmulhq_s16:
6822case ARM::BI__builtin_arm_mve_vmulhq_s32:
6823case ARM::BI__builtin_arm_mve_vmulhq_s8:
6824case ARM::BI__builtin_arm_mve_vmulhq_u16:
6825case ARM::BI__builtin_arm_mve_vmulhq_u32:
6826case ARM::BI__builtin_arm_mve_vmulhq_u8:
6827case ARM::BI__builtin_arm_mve_vqshlq_n_s16:
6828case ARM::BI__builtin_arm_mve_vqshlq_n_s32:
6829case ARM::BI__builtin_arm_mve_vqshlq_n_s8:
6830case ARM::BI__builtin_arm_mve_vqshlq_n_u16:
6831case ARM::BI__builtin_arm_mve_vqshlq_n_u32:
6832case ARM::BI__builtin_arm_mve_vqshlq_n_u8:
6833case ARM::BI__builtin_arm_mve_vrhaddq_s16:
6834case ARM::BI__builtin_arm_mve_vrhaddq_s32:
6835case ARM::BI__builtin_arm_mve_vrhaddq_s8:
6836case ARM::BI__builtin_arm_mve_vrhaddq_u16:
6837case ARM::BI__builtin_arm_mve_vrhaddq_u32:
6838case ARM::BI__builtin_arm_mve_vrhaddq_u8:
6839case ARM::BI__builtin_arm_mve_vrmulhq_s16:
6840case ARM::BI__builtin_arm_mve_vrmulhq_s32:
6841case ARM::BI__builtin_arm_mve_vrmulhq_s8:
6842case ARM::BI__builtin_arm_mve_vrmulhq_u16:
6843case ARM::BI__builtin_arm_mve_vrmulhq_u32:
6844case ARM::BI__builtin_arm_mve_vrmulhq_u8:
6845case ARM::BI__builtin_arm_mve_vrshrq_n_s16:
6846case ARM::BI__builtin_arm_mve_vrshrq_n_s32:
6847case ARM::BI__builtin_arm_mve_vrshrq_n_s8:
6848case ARM::BI__builtin_arm_mve_vrshrq_n_u16:
6849case ARM::BI__builtin_arm_mve_vrshrq_n_u32:
6850case ARM::BI__builtin_arm_mve_vrshrq_n_u8: {
6851 uint32_t Param0;
6852 Intrinsic::ID Param1;
6853 llvm::Type * Param2;
6854 switch (BuiltinID) {
6855 case ARM::BI__builtin_arm_mve_vabdq_f16:
6856 Param0 = 0;
6857 Param1 = Intrinsic::arm_mve_vabd;
6858 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
6859 break;
6860 case ARM::BI__builtin_arm_mve_vabdq_f32:
6861 Param0 = 0;
6862 Param1 = Intrinsic::arm_mve_vabd;
6863 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
6864 break;
6865 case ARM::BI__builtin_arm_mve_vabdq_s16:
6866 Param0 = 0;
6867 Param1 = Intrinsic::arm_mve_vabd;
6868 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6869 break;
6870 case ARM::BI__builtin_arm_mve_vabdq_s32:
6871 Param0 = 0;
6872 Param1 = Intrinsic::arm_mve_vabd;
6873 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6874 break;
6875 case ARM::BI__builtin_arm_mve_vabdq_s8:
6876 Param0 = 0;
6877 Param1 = Intrinsic::arm_mve_vabd;
6878 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6879 break;
6880 case ARM::BI__builtin_arm_mve_vabdq_u16:
6881 Param0 = 1;
6882 Param1 = Intrinsic::arm_mve_vabd;
6883 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6884 break;
6885 case ARM::BI__builtin_arm_mve_vabdq_u32:
6886 Param0 = 1;
6887 Param1 = Intrinsic::arm_mve_vabd;
6888 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6889 break;
6890 case ARM::BI__builtin_arm_mve_vabdq_u8:
6891 Param0 = 1;
6892 Param1 = Intrinsic::arm_mve_vabd;
6893 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6894 break;
6895 case ARM::BI__builtin_arm_mve_vhaddq_s16:
6896 Param0 = 0;
6897 Param1 = Intrinsic::arm_mve_vhadd;
6898 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6899 break;
6900 case ARM::BI__builtin_arm_mve_vhaddq_s32:
6901 Param0 = 0;
6902 Param1 = Intrinsic::arm_mve_vhadd;
6903 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6904 break;
6905 case ARM::BI__builtin_arm_mve_vhaddq_s8:
6906 Param0 = 0;
6907 Param1 = Intrinsic::arm_mve_vhadd;
6908 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6909 break;
6910 case ARM::BI__builtin_arm_mve_vhaddq_u16:
6911 Param0 = 1;
6912 Param1 = Intrinsic::arm_mve_vhadd;
6913 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6914 break;
6915 case ARM::BI__builtin_arm_mve_vhaddq_u32:
6916 Param0 = 1;
6917 Param1 = Intrinsic::arm_mve_vhadd;
6918 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6919 break;
6920 case ARM::BI__builtin_arm_mve_vhaddq_u8:
6921 Param0 = 1;
6922 Param1 = Intrinsic::arm_mve_vhadd;
6923 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6924 break;
6925 case ARM::BI__builtin_arm_mve_vhsubq_s16:
6926 Param0 = 0;
6927 Param1 = Intrinsic::arm_mve_vhsub;
6928 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6929 break;
6930 case ARM::BI__builtin_arm_mve_vhsubq_s32:
6931 Param0 = 0;
6932 Param1 = Intrinsic::arm_mve_vhsub;
6933 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6934 break;
6935 case ARM::BI__builtin_arm_mve_vhsubq_s8:
6936 Param0 = 0;
6937 Param1 = Intrinsic::arm_mve_vhsub;
6938 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6939 break;
6940 case ARM::BI__builtin_arm_mve_vhsubq_u16:
6941 Param0 = 1;
6942 Param1 = Intrinsic::arm_mve_vhsub;
6943 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6944 break;
6945 case ARM::BI__builtin_arm_mve_vhsubq_u32:
6946 Param0 = 1;
6947 Param1 = Intrinsic::arm_mve_vhsub;
6948 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6949 break;
6950 case ARM::BI__builtin_arm_mve_vhsubq_u8:
6951 Param0 = 1;
6952 Param1 = Intrinsic::arm_mve_vhsub;
6953 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6954 break;
6955 case ARM::BI__builtin_arm_mve_vmulhq_s16:
6956 Param0 = 0;
6957 Param1 = Intrinsic::arm_mve_vmulh;
6958 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6959 break;
6960 case ARM::BI__builtin_arm_mve_vmulhq_s32:
6961 Param0 = 0;
6962 Param1 = Intrinsic::arm_mve_vmulh;
6963 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6964 break;
6965 case ARM::BI__builtin_arm_mve_vmulhq_s8:
6966 Param0 = 0;
6967 Param1 = Intrinsic::arm_mve_vmulh;
6968 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6969 break;
6970 case ARM::BI__builtin_arm_mve_vmulhq_u16:
6971 Param0 = 1;
6972 Param1 = Intrinsic::arm_mve_vmulh;
6973 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6974 break;
6975 case ARM::BI__builtin_arm_mve_vmulhq_u32:
6976 Param0 = 1;
6977 Param1 = Intrinsic::arm_mve_vmulh;
6978 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6979 break;
6980 case ARM::BI__builtin_arm_mve_vmulhq_u8:
6981 Param0 = 1;
6982 Param1 = Intrinsic::arm_mve_vmulh;
6983 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6984 break;
6985 case ARM::BI__builtin_arm_mve_vqshlq_n_s16:
6986 Param0 = 0;
6987 Param1 = Intrinsic::arm_mve_vqshl_imm;
6988 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
6989 break;
6990 case ARM::BI__builtin_arm_mve_vqshlq_n_s32:
6991 Param0 = 0;
6992 Param1 = Intrinsic::arm_mve_vqshl_imm;
6993 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
6994 break;
6995 case ARM::BI__builtin_arm_mve_vqshlq_n_s8:
6996 Param0 = 0;
6997 Param1 = Intrinsic::arm_mve_vqshl_imm;
6998 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
6999 break;
7000 case ARM::BI__builtin_arm_mve_vqshlq_n_u16:
7001 Param0 = 1;
7002 Param1 = Intrinsic::arm_mve_vqshl_imm;
7003 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7004 break;
7005 case ARM::BI__builtin_arm_mve_vqshlq_n_u32:
7006 Param0 = 1;
7007 Param1 = Intrinsic::arm_mve_vqshl_imm;
7008 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7009 break;
7010 case ARM::BI__builtin_arm_mve_vqshlq_n_u8:
7011 Param0 = 1;
7012 Param1 = Intrinsic::arm_mve_vqshl_imm;
7013 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7014 break;
7015 case ARM::BI__builtin_arm_mve_vrhaddq_s16:
7016 Param0 = 0;
7017 Param1 = Intrinsic::arm_mve_vrhadd;
7018 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7019 break;
7020 case ARM::BI__builtin_arm_mve_vrhaddq_s32:
7021 Param0 = 0;
7022 Param1 = Intrinsic::arm_mve_vrhadd;
7023 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7024 break;
7025 case ARM::BI__builtin_arm_mve_vrhaddq_s8:
7026 Param0 = 0;
7027 Param1 = Intrinsic::arm_mve_vrhadd;
7028 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7029 break;
7030 case ARM::BI__builtin_arm_mve_vrhaddq_u16:
7031 Param0 = 1;
7032 Param1 = Intrinsic::arm_mve_vrhadd;
7033 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7034 break;
7035 case ARM::BI__builtin_arm_mve_vrhaddq_u32:
7036 Param0 = 1;
7037 Param1 = Intrinsic::arm_mve_vrhadd;
7038 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7039 break;
7040 case ARM::BI__builtin_arm_mve_vrhaddq_u8:
7041 Param0 = 1;
7042 Param1 = Intrinsic::arm_mve_vrhadd;
7043 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7044 break;
7045 case ARM::BI__builtin_arm_mve_vrmulhq_s16:
7046 Param0 = 0;
7047 Param1 = Intrinsic::arm_mve_vrmulh;
7048 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7049 break;
7050 case ARM::BI__builtin_arm_mve_vrmulhq_s32:
7051 Param0 = 0;
7052 Param1 = Intrinsic::arm_mve_vrmulh;
7053 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7054 break;
7055 case ARM::BI__builtin_arm_mve_vrmulhq_s8:
7056 Param0 = 0;
7057 Param1 = Intrinsic::arm_mve_vrmulh;
7058 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7059 break;
7060 case ARM::BI__builtin_arm_mve_vrmulhq_u16:
7061 Param0 = 1;
7062 Param1 = Intrinsic::arm_mve_vrmulh;
7063 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7064 break;
7065 case ARM::BI__builtin_arm_mve_vrmulhq_u32:
7066 Param0 = 1;
7067 Param1 = Intrinsic::arm_mve_vrmulh;
7068 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7069 break;
7070 case ARM::BI__builtin_arm_mve_vrmulhq_u8:
7071 Param0 = 1;
7072 Param1 = Intrinsic::arm_mve_vrmulh;
7073 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7074 break;
7075 case ARM::BI__builtin_arm_mve_vrshrq_n_s16:
7076 Param0 = 0;
7077 Param1 = Intrinsic::arm_mve_vrshr_imm;
7078 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7079 break;
7080 case ARM::BI__builtin_arm_mve_vrshrq_n_s32:
7081 Param0 = 0;
7082 Param1 = Intrinsic::arm_mve_vrshr_imm;
7083 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7084 break;
7085 case ARM::BI__builtin_arm_mve_vrshrq_n_s8:
7086 Param0 = 0;
7087 Param1 = Intrinsic::arm_mve_vrshr_imm;
7088 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7089 break;
7090 case ARM::BI__builtin_arm_mve_vrshrq_n_u16:
7091 Param0 = 1;
7092 Param1 = Intrinsic::arm_mve_vrshr_imm;
7093 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7094 break;
7095 case ARM::BI__builtin_arm_mve_vrshrq_n_u32:
7096 Param0 = 1;
7097 Param1 = Intrinsic::arm_mve_vrshr_imm;
7098 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7099 break;
7100 case ARM::BI__builtin_arm_mve_vrshrq_n_u8:
7101 Param0 = 1;
7102 Param1 = Intrinsic::arm_mve_vrshr_imm;
7103 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7104 break;
7105 }
7106 Value *Val0 = EmitScalarExpr(E->getArg(0));
7107 Value *Val1 = EmitScalarExpr(E->getArg(1));
7108 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
7109 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1, Val2});
7110}
7111case ARM::BI__builtin_arm_mve_vaddq_s16:
7112case ARM::BI__builtin_arm_mve_vaddq_s32:
7113case ARM::BI__builtin_arm_mve_vaddq_s8:
7114case ARM::BI__builtin_arm_mve_vaddq_u16:
7115case ARM::BI__builtin_arm_mve_vaddq_u32:
7116case ARM::BI__builtin_arm_mve_vaddq_u8: {
7117 Value *Val0 = EmitScalarExpr(E->getArg(0));
7118 Value *Val1 = EmitScalarExpr(E->getArg(1));
7119 return Builder.CreateAdd(Val0, Val1);
7120}
7121case ARM::BI__builtin_arm_mve_vandq_s16:
7122case ARM::BI__builtin_arm_mve_vandq_s32:
7123case ARM::BI__builtin_arm_mve_vandq_s8:
7124case ARM::BI__builtin_arm_mve_vandq_u16:
7125case ARM::BI__builtin_arm_mve_vandq_u32:
7126case ARM::BI__builtin_arm_mve_vandq_u8: {
7127 Value *Val0 = EmitScalarExpr(E->getArg(0));
7128 Value *Val1 = EmitScalarExpr(E->getArg(1));
7129 return Builder.CreateAnd(Val0, Val1);
7130}
7131case ARM::BI__builtin_arm_mve_vldrdq_gather_base_s64:
7132case ARM::BI__builtin_arm_mve_vldrdq_gather_base_u64:
7133case ARM::BI__builtin_arm_mve_vldrwq_gather_base_f32:
7134case ARM::BI__builtin_arm_mve_vldrwq_gather_base_s32:
7135case ARM::BI__builtin_arm_mve_vldrwq_gather_base_u32: {
7136 llvm::Type * Param0;
7137 llvm::Type * Param1;
7138 switch (BuiltinID) {
7139 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_s64:
7140 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
7141 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
7142 break;
7143 case ARM::BI__builtin_arm_mve_vldrdq_gather_base_u64:
7144 Param0 = llvm::FixedVectorType::get(Int64Ty, 2);
7145 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
7146 break;
7147 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_f32:
7148 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
7149 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7150 break;
7151 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_s32:
7152 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
7153 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7154 break;
7155 case ARM::BI__builtin_arm_mve_vldrwq_gather_base_u32:
7156 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
7157 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7158 break;
7159 }
7160 Value *Val0 = EmitScalarExpr(E->getArg(0));
7161 Value *Val1 = EmitScalarExpr(E->getArg(1));
7162 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vldr_gather_base, {Param0, Param1}), {Val0, Val1});
7163}
7164case ARM::BI__builtin_arm_mve_sqrshr:
7165case ARM::BI__builtin_arm_mve_sqshl:
7166case ARM::BI__builtin_arm_mve_srshr:
7167case ARM::BI__builtin_arm_mve_uqrshl:
7168case ARM::BI__builtin_arm_mve_uqshl:
7169case ARM::BI__builtin_arm_mve_urshr: {
7170 Intrinsic::ID Param0;
7171 switch (BuiltinID) {
7172 case ARM::BI__builtin_arm_mve_sqrshr:
7173 Param0 = Intrinsic::arm_mve_sqrshr;
7174 break;
7175 case ARM::BI__builtin_arm_mve_sqshl:
7176 Param0 = Intrinsic::arm_mve_sqshl;
7177 break;
7178 case ARM::BI__builtin_arm_mve_srshr:
7179 Param0 = Intrinsic::arm_mve_srshr;
7180 break;
7181 case ARM::BI__builtin_arm_mve_uqrshl:
7182 Param0 = Intrinsic::arm_mve_uqrshl;
7183 break;
7184 case ARM::BI__builtin_arm_mve_uqshl:
7185 Param0 = Intrinsic::arm_mve_uqshl;
7186 break;
7187 case ARM::BI__builtin_arm_mve_urshr:
7188 Param0 = Intrinsic::arm_mve_urshr;
7189 break;
7190 }
7191 Value *Val0 = EmitScalarExpr(E->getArg(0));
7192 Value *Val1 = EmitScalarExpr(E->getArg(1));
7193 return Builder.CreateCall(CGM.getIntrinsic(Param0), {Val0, Val1});
7194}
7195case ARM::BI__builtin_arm_mve_vbrsrq_n_f16:
7196case ARM::BI__builtin_arm_mve_vbrsrq_n_f32:
7197case ARM::BI__builtin_arm_mve_vbrsrq_n_s16:
7198case ARM::BI__builtin_arm_mve_vbrsrq_n_s32:
7199case ARM::BI__builtin_arm_mve_vbrsrq_n_s8:
7200case ARM::BI__builtin_arm_mve_vbrsrq_n_u16:
7201case ARM::BI__builtin_arm_mve_vbrsrq_n_u32:
7202case ARM::BI__builtin_arm_mve_vbrsrq_n_u8:
7203case ARM::BI__builtin_arm_mve_vmaxnmq_f16:
7204case ARM::BI__builtin_arm_mve_vmaxnmq_f32:
7205case ARM::BI__builtin_arm_mve_vminnmq_f16:
7206case ARM::BI__builtin_arm_mve_vminnmq_f32:
7207case ARM::BI__builtin_arm_mve_vqaddq_s16:
7208case ARM::BI__builtin_arm_mve_vqaddq_s32:
7209case ARM::BI__builtin_arm_mve_vqaddq_s8:
7210case ARM::BI__builtin_arm_mve_vqaddq_u16:
7211case ARM::BI__builtin_arm_mve_vqaddq_u32:
7212case ARM::BI__builtin_arm_mve_vqaddq_u8:
7213case ARM::BI__builtin_arm_mve_vqdmulhq_s16:
7214case ARM::BI__builtin_arm_mve_vqdmulhq_s32:
7215case ARM::BI__builtin_arm_mve_vqdmulhq_s8:
7216case ARM::BI__builtin_arm_mve_vqrdmulhq_s16:
7217case ARM::BI__builtin_arm_mve_vqrdmulhq_s32:
7218case ARM::BI__builtin_arm_mve_vqrdmulhq_s8:
7219case ARM::BI__builtin_arm_mve_vqshluq_n_s16:
7220case ARM::BI__builtin_arm_mve_vqshluq_n_s32:
7221case ARM::BI__builtin_arm_mve_vqshluq_n_s8:
7222case ARM::BI__builtin_arm_mve_vqsubq_s16:
7223case ARM::BI__builtin_arm_mve_vqsubq_s32:
7224case ARM::BI__builtin_arm_mve_vqsubq_s8:
7225case ARM::BI__builtin_arm_mve_vqsubq_u16:
7226case ARM::BI__builtin_arm_mve_vqsubq_u32:
7227case ARM::BI__builtin_arm_mve_vqsubq_u8: {
7228 Intrinsic::ID Param0;
7229 llvm::Type * Param1;
7230 switch (BuiltinID) {
7231 case ARM::BI__builtin_arm_mve_vbrsrq_n_f16:
7232 Param0 = Intrinsic::arm_mve_vbrsr;
7233 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
7234 break;
7235 case ARM::BI__builtin_arm_mve_vbrsrq_n_f32:
7236 Param0 = Intrinsic::arm_mve_vbrsr;
7237 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
7238 break;
7239 case ARM::BI__builtin_arm_mve_vbrsrq_n_s16:
7240 Param0 = Intrinsic::arm_mve_vbrsr;
7241 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7242 break;
7243 case ARM::BI__builtin_arm_mve_vbrsrq_n_s32:
7244 Param0 = Intrinsic::arm_mve_vbrsr;
7245 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7246 break;
7247 case ARM::BI__builtin_arm_mve_vbrsrq_n_s8:
7248 Param0 = Intrinsic::arm_mve_vbrsr;
7249 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7250 break;
7251 case ARM::BI__builtin_arm_mve_vbrsrq_n_u16:
7252 Param0 = Intrinsic::arm_mve_vbrsr;
7253 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7254 break;
7255 case ARM::BI__builtin_arm_mve_vbrsrq_n_u32:
7256 Param0 = Intrinsic::arm_mve_vbrsr;
7257 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7258 break;
7259 case ARM::BI__builtin_arm_mve_vbrsrq_n_u8:
7260 Param0 = Intrinsic::arm_mve_vbrsr;
7261 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7262 break;
7263 case ARM::BI__builtin_arm_mve_vmaxnmq_f16:
7264 Param0 = Intrinsic::maxnum;
7265 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
7266 break;
7267 case ARM::BI__builtin_arm_mve_vmaxnmq_f32:
7268 Param0 = Intrinsic::maxnum;
7269 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
7270 break;
7271 case ARM::BI__builtin_arm_mve_vminnmq_f16:
7272 Param0 = Intrinsic::minnum;
7273 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
7274 break;
7275 case ARM::BI__builtin_arm_mve_vminnmq_f32:
7276 Param0 = Intrinsic::minnum;
7277 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
7278 break;
7279 case ARM::BI__builtin_arm_mve_vqaddq_s16:
7280 Param0 = Intrinsic::sadd_sat;
7281 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7282 break;
7283 case ARM::BI__builtin_arm_mve_vqaddq_s32:
7284 Param0 = Intrinsic::sadd_sat;
7285 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7286 break;
7287 case ARM::BI__builtin_arm_mve_vqaddq_s8:
7288 Param0 = Intrinsic::sadd_sat;
7289 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7290 break;
7291 case ARM::BI__builtin_arm_mve_vqaddq_u16:
7292 Param0 = Intrinsic::uadd_sat;
7293 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7294 break;
7295 case ARM::BI__builtin_arm_mve_vqaddq_u32:
7296 Param0 = Intrinsic::uadd_sat;
7297 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7298 break;
7299 case ARM::BI__builtin_arm_mve_vqaddq_u8:
7300 Param0 = Intrinsic::uadd_sat;
7301 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7302 break;
7303 case ARM::BI__builtin_arm_mve_vqdmulhq_s16:
7304 Param0 = Intrinsic::arm_mve_vqdmulh;
7305 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7306 break;
7307 case ARM::BI__builtin_arm_mve_vqdmulhq_s32:
7308 Param0 = Intrinsic::arm_mve_vqdmulh;
7309 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7310 break;
7311 case ARM::BI__builtin_arm_mve_vqdmulhq_s8:
7312 Param0 = Intrinsic::arm_mve_vqdmulh;
7313 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7314 break;
7315 case ARM::BI__builtin_arm_mve_vqrdmulhq_s16:
7316 Param0 = Intrinsic::arm_mve_vqrdmulh;
7317 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7318 break;
7319 case ARM::BI__builtin_arm_mve_vqrdmulhq_s32:
7320 Param0 = Intrinsic::arm_mve_vqrdmulh;
7321 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7322 break;
7323 case ARM::BI__builtin_arm_mve_vqrdmulhq_s8:
7324 Param0 = Intrinsic::arm_mve_vqrdmulh;
7325 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7326 break;
7327 case ARM::BI__builtin_arm_mve_vqshluq_n_s16:
7328 Param0 = Intrinsic::arm_mve_vqshlu_imm;
7329 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7330 break;
7331 case ARM::BI__builtin_arm_mve_vqshluq_n_s32:
7332 Param0 = Intrinsic::arm_mve_vqshlu_imm;
7333 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7334 break;
7335 case ARM::BI__builtin_arm_mve_vqshluq_n_s8:
7336 Param0 = Intrinsic::arm_mve_vqshlu_imm;
7337 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7338 break;
7339 case ARM::BI__builtin_arm_mve_vqsubq_s16:
7340 Param0 = Intrinsic::ssub_sat;
7341 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7342 break;
7343 case ARM::BI__builtin_arm_mve_vqsubq_s32:
7344 Param0 = Intrinsic::ssub_sat;
7345 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7346 break;
7347 case ARM::BI__builtin_arm_mve_vqsubq_s8:
7348 Param0 = Intrinsic::ssub_sat;
7349 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7350 break;
7351 case ARM::BI__builtin_arm_mve_vqsubq_u16:
7352 Param0 = Intrinsic::usub_sat;
7353 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
7354 break;
7355 case ARM::BI__builtin_arm_mve_vqsubq_u32:
7356 Param0 = Intrinsic::usub_sat;
7357 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
7358 break;
7359 case ARM::BI__builtin_arm_mve_vqsubq_u8:
7360 Param0 = Intrinsic::usub_sat;
7361 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
7362 break;
7363 }
7364 Value *Val0 = EmitScalarExpr(E->getArg(0));
7365 Value *Val1 = EmitScalarExpr(E->getArg(1));
7366 return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0, Val1});
7367}
7368case ARM::BI__builtin_arm_mve_vgetq_lane_f16:
7369case ARM::BI__builtin_arm_mve_vgetq_lane_f32:
7370case ARM::BI__builtin_arm_mve_vgetq_lane_s16:
7371case ARM::BI__builtin_arm_mve_vgetq_lane_s32:
7372case ARM::BI__builtin_arm_mve_vgetq_lane_s64:
7373case ARM::BI__builtin_arm_mve_vgetq_lane_s8:
7374case ARM::BI__builtin_arm_mve_vgetq_lane_u16:
7375case ARM::BI__builtin_arm_mve_vgetq_lane_u32:
7376case ARM::BI__builtin_arm_mve_vgetq_lane_u64:
7377case ARM::BI__builtin_arm_mve_vgetq_lane_u8: {
7378 Value *Val0 = EmitScalarExpr(E->getArg(0));
7379 Value *Val1 = EmitScalarExpr(E->getArg(1));
7380 return Builder.CreateExtractElement(Val0, Val1);
7381}
7382case ARM::BI__builtin_arm_mve_vaddq_f16:
7383case ARM::BI__builtin_arm_mve_vaddq_f32: {
7384 Value *Val0 = EmitScalarExpr(E->getArg(0));
7385 Value *Val1 = EmitScalarExpr(E->getArg(1));
7386 return Builder.CreateFAdd(Val0, Val1);
7387}
7388case ARM::BI__builtin_arm_mve_vmulq_f16:
7389case ARM::BI__builtin_arm_mve_vmulq_f32: {
7390 Value *Val0 = EmitScalarExpr(E->getArg(0));
7391 Value *Val1 = EmitScalarExpr(E->getArg(1));
7392 return Builder.CreateFMul(Val0, Val1);
7393}
7394case ARM::BI__builtin_arm_mve_vsubq_f16:
7395case ARM::BI__builtin_arm_mve_vsubq_f32: {
7396 Value *Val0 = EmitScalarExpr(E->getArg(0));
7397 Value *Val1 = EmitScalarExpr(E->getArg(1));
7398 return Builder.CreateFSub(Val0, Val1);
7399}
7400case ARM::BI__builtin_arm_mve_vmulq_s16:
7401case ARM::BI__builtin_arm_mve_vmulq_s32:
7402case ARM::BI__builtin_arm_mve_vmulq_s8:
7403case ARM::BI__builtin_arm_mve_vmulq_u16:
7404case ARM::BI__builtin_arm_mve_vmulq_u32:
7405case ARM::BI__builtin_arm_mve_vmulq_u8: {
7406 Value *Val0 = EmitScalarExpr(E->getArg(0));
7407 Value *Val1 = EmitScalarExpr(E->getArg(1));
7408 return Builder.CreateMul(Val0, Val1);
7409}
7410case ARM::BI__builtin_arm_mve_vorrq_s16:
7411case ARM::BI__builtin_arm_mve_vorrq_s32:
7412case ARM::BI__builtin_arm_mve_vorrq_s8:
7413case ARM::BI__builtin_arm_mve_vorrq_u16:
7414case ARM::BI__builtin_arm_mve_vorrq_u32:
7415case ARM::BI__builtin_arm_mve_vorrq_u8: {
7416 Value *Val0 = EmitScalarExpr(E->getArg(0));
7417 Value *Val1 = EmitScalarExpr(E->getArg(1));
7418 return Builder.CreateOr(Val0, Val1);
7419}
7420case ARM::BI__builtin_arm_mve_vsubq_s16:
7421case ARM::BI__builtin_arm_mve_vsubq_s32:
7422case ARM::BI__builtin_arm_mve_vsubq_s8:
7423case ARM::BI__builtin_arm_mve_vsubq_u16:
7424case ARM::BI__builtin_arm_mve_vsubq_u32:
7425case ARM::BI__builtin_arm_mve_vsubq_u8: {
7426 Value *Val0 = EmitScalarExpr(E->getArg(0));
7427 Value *Val1 = EmitScalarExpr(E->getArg(1));
7428 return Builder.CreateSub(Val0, Val1);
7429}
7430case ARM::BI__builtin_arm_mve_veorq_s16:
7431case ARM::BI__builtin_arm_mve_veorq_s32:
7432case ARM::BI__builtin_arm_mve_veorq_s8:
7433case ARM::BI__builtin_arm_mve_veorq_u16:
7434case ARM::BI__builtin_arm_mve_veorq_u32:
7435case ARM::BI__builtin_arm_mve_veorq_u8: {
7436 Value *Val0 = EmitScalarExpr(E->getArg(0));
7437 Value *Val1 = EmitScalarExpr(E->getArg(1));
7438 return Builder.CreateXor(Val0, Val1);
7439}
7440case ARM::BI__builtin_arm_mve_vmovlbq_s8:
7441case ARM::BI__builtin_arm_mve_vmovlbq_u8:
7442case ARM::BI__builtin_arm_mve_vmovltq_s8:
7443case ARM::BI__builtin_arm_mve_vmovltq_u8: {
7444 bool Param0;
7445 bool Param1;
7446 switch (BuiltinID) {
7447 case ARM::BI__builtin_arm_mve_vmovlbq_s8:
7448 Param0 = 0;
7449 Param1 = 0;
7450 break;
7451 case ARM::BI__builtin_arm_mve_vmovlbq_u8:
7452 Param0 = 0;
7453 Param1 = 1;
7454 break;
7455 case ARM::BI__builtin_arm_mve_vmovltq_s8:
7456 Param0 = 1;
7457 Param1 = 0;
7458 break;
7459 case ARM::BI__builtin_arm_mve_vmovltq_u8:
7460 Param0 = 1;
7461 Param1 = 1;
7462 break;
7463 }
7464 Value *Val0 = EmitScalarExpr(E->getArg(0));
7465 Value *Val1 = VectorUnzip(Builder, Val0, static_cast<bool>(Param0));
7466 llvm::Type *Val2 = llvm::FixedVectorType::get(Int16Ty, 8);
7467 return SignOrZeroExtend(Builder, Val1, Val2, static_cast<bool>(Param1));
7468}
7469case ARM::BI__builtin_arm_mve_vmovlbq_s16:
7470case ARM::BI__builtin_arm_mve_vmovlbq_u16:
7471case ARM::BI__builtin_arm_mve_vmovltq_s16:
7472case ARM::BI__builtin_arm_mve_vmovltq_u16: {
7473 bool Param0;
7474 bool Param1;
7475 switch (BuiltinID) {
7476 case ARM::BI__builtin_arm_mve_vmovlbq_s16:
7477 Param0 = 0;
7478 Param1 = 0;
7479 break;
7480 case ARM::BI__builtin_arm_mve_vmovlbq_u16:
7481 Param0 = 0;
7482 Param1 = 1;
7483 break;
7484 case ARM::BI__builtin_arm_mve_vmovltq_s16:
7485 Param0 = 1;
7486 Param1 = 0;
7487 break;
7488 case ARM::BI__builtin_arm_mve_vmovltq_u16:
7489 Param0 = 1;
7490 Param1 = 1;
7491 break;
7492 }
7493 Value *Val0 = EmitScalarExpr(E->getArg(0));
7494 Value *Val1 = VectorUnzip(Builder, Val0, static_cast<bool>(Param0));
7495 llvm::Type *Val2 = llvm::FixedVectorType::get(Int32Ty, 4);
7496 return SignOrZeroExtend(Builder, Val1, Val2, static_cast<bool>(Param1));
7497}
7498case ARM::BI__builtin_arm_mve_vclzq_s16:
7499case ARM::BI__builtin_arm_mve_vclzq_s32:
7500case ARM::BI__builtin_arm_mve_vclzq_s8:
7501case ARM::BI__builtin_arm_mve_vclzq_u16:
7502case ARM::BI__builtin_arm_mve_vclzq_u32:
7503case ARM::BI__builtin_arm_mve_vclzq_u8: {
7504 llvm::Type * Param0;
7505 switch (BuiltinID) {
7506 case ARM::BI__builtin_arm_mve_vclzq_s16:
7507 Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
7508 break;
7509 case ARM::BI__builtin_arm_mve_vclzq_s32:
7510 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
7511 break;
7512 case ARM::BI__builtin_arm_mve_vclzq_s8:
7513 Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
7514 break;
7515 case ARM::BI__builtin_arm_mve_vclzq_u16:
7516 Param0 = llvm::FixedVectorType::get(Int16Ty, 8);
7517 break;
7518 case ARM::BI__builtin_arm_mve_vclzq_u32:
7519 Param0 = llvm::FixedVectorType::get(Int32Ty, 4);
7520 break;
7521 case ARM::BI__builtin_arm_mve_vclzq_u8:
7522 Param0 = llvm::FixedVectorType::get(Int8Ty, 16);
7523 break;
7524 }
7525 Value *Val0 = EmitScalarExpr(E->getArg(0));
7526 Value *Val1 = llvm::ConstantInt::get(Builder.getInt1Ty(), static_cast<bool>(0));
7527 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::ctlz, {Param0}), {Val0, Val1});
7528}
7529case ARM::BI__builtin_arm_mve_vpnot: {
7530 Value *Val0 = EmitScalarExpr(E->getArg(0));
7531 Value *Val1 = llvm::ConstantInt::get(Int16Ty, 65535);
7532 return Builder.CreateXor(Val0, Val1);
7533}
7534case ARM::BI__builtin_arm_mve_vaddlvq_p_s32:
7535case ARM::BI__builtin_arm_mve_vaddlvq_p_u32:
7536case ARM::BI__builtin_arm_mve_vaddvq_p_s16:
7537case ARM::BI__builtin_arm_mve_vaddvq_p_s32:
7538case ARM::BI__builtin_arm_mve_vaddvq_p_s8:
7539case ARM::BI__builtin_arm_mve_vaddvq_p_u16:
7540case ARM::BI__builtin_arm_mve_vaddvq_p_u32:
7541case ARM::BI__builtin_arm_mve_vaddvq_p_u8: {
7542 uint32_t Param0;
7543 llvm::Type * Param1;
7544 Intrinsic::ID Param2;
7545 llvm::Type * Param3;
7546 switch (BuiltinID) {
7547 case ARM::BI__builtin_arm_mve_vaddlvq_p_s32:
7548 Param0 = 0;
7549 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7550 Param2 = Intrinsic::arm_mve_addlv_predicated;
7551 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
7552 break;
7553 case ARM::BI__builtin_arm_mve_vaddlvq_p_u32:
7554 Param0 = 1;
7555 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7556 Param2 = Intrinsic::arm_mve_addlv_predicated;
7557 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
7558 break;
7559 case ARM::BI__builtin_arm_mve_vaddvq_p_s16:
7560 Param0 = 0;
7561 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
7562 Param2 = Intrinsic::arm_mve_addv_predicated;
7563 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
7564 break;
7565 case ARM::BI__builtin_arm_mve_vaddvq_p_s32:
7566 Param0 = 0;
7567 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7568 Param2 = Intrinsic::arm_mve_addv_predicated;
7569 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
7570 break;
7571 case ARM::BI__builtin_arm_mve_vaddvq_p_s8:
7572 Param0 = 0;
7573 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
7574 Param2 = Intrinsic::arm_mve_addv_predicated;
7575 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
7576 break;
7577 case ARM::BI__builtin_arm_mve_vaddvq_p_u16:
7578 Param0 = 1;
7579 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
7580 Param2 = Intrinsic::arm_mve_addv_predicated;
7581 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
7582 break;
7583 case ARM::BI__builtin_arm_mve_vaddvq_p_u32:
7584 Param0 = 1;
7585 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7586 Param2 = Intrinsic::arm_mve_addv_predicated;
7587 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
7588 break;
7589 case ARM::BI__builtin_arm_mve_vaddvq_p_u8:
7590 Param0 = 1;
7591 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
7592 Param2 = Intrinsic::arm_mve_addv_predicated;
7593 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
7594 break;
7595 }
7596 Value *Val0 = EmitScalarExpr(E->getArg(0));
7597 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
7598 Value *Val2 = EmitScalarExpr(E->getArg(1));
7599 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
7600 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
7601 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val4});
7602}
7603case ARM::BI__builtin_arm_mve_vcvtbq_f32_f16:
7604case ARM::BI__builtin_arm_mve_vcvttq_f32_f16: {
7605 uint32_t Param0;
7606 switch (BuiltinID) {
7607 case ARM::BI__builtin_arm_mve_vcvtbq_f32_f16:
7608 Param0 = 0;
7609 break;
7610 case ARM::BI__builtin_arm_mve_vcvttq_f32_f16:
7611 Param0 = 1;
7612 break;
7613 }
7614 Value *Val0 = EmitScalarExpr(E->getArg(0));
7615 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
7616 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_widen), {Val0, Val1});
7617}
7618case ARM::BI__builtin_arm_mve_vaddlvq_s32:
7619case ARM::BI__builtin_arm_mve_vaddlvq_u32:
7620case ARM::BI__builtin_arm_mve_vaddvq_s16:
7621case ARM::BI__builtin_arm_mve_vaddvq_s32:
7622case ARM::BI__builtin_arm_mve_vaddvq_s8:
7623case ARM::BI__builtin_arm_mve_vaddvq_u16:
7624case ARM::BI__builtin_arm_mve_vaddvq_u32:
7625case ARM::BI__builtin_arm_mve_vaddvq_u8: {
7626 uint32_t Param0;
7627 Intrinsic::ID Param1;
7628 llvm::Type * Param2;
7629 switch (BuiltinID) {
7630 case ARM::BI__builtin_arm_mve_vaddlvq_s32:
7631 Param0 = 0;
7632 Param1 = Intrinsic::arm_mve_addlv;
7633 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7634 break;
7635 case ARM::BI__builtin_arm_mve_vaddlvq_u32:
7636 Param0 = 1;
7637 Param1 = Intrinsic::arm_mve_addlv;
7638 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7639 break;
7640 case ARM::BI__builtin_arm_mve_vaddvq_s16:
7641 Param0 = 0;
7642 Param1 = Intrinsic::arm_mve_addv;
7643 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7644 break;
7645 case ARM::BI__builtin_arm_mve_vaddvq_s32:
7646 Param0 = 0;
7647 Param1 = Intrinsic::arm_mve_addv;
7648 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7649 break;
7650 case ARM::BI__builtin_arm_mve_vaddvq_s8:
7651 Param0 = 0;
7652 Param1 = Intrinsic::arm_mve_addv;
7653 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7654 break;
7655 case ARM::BI__builtin_arm_mve_vaddvq_u16:
7656 Param0 = 1;
7657 Param1 = Intrinsic::arm_mve_addv;
7658 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
7659 break;
7660 case ARM::BI__builtin_arm_mve_vaddvq_u32:
7661 Param0 = 1;
7662 Param1 = Intrinsic::arm_mve_addv;
7663 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
7664 break;
7665 case ARM::BI__builtin_arm_mve_vaddvq_u8:
7666 Param0 = 1;
7667 Param1 = Intrinsic::arm_mve_addv;
7668 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
7669 break;
7670 }
7671 Value *Val0 = EmitScalarExpr(E->getArg(0));
7672 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
7673 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1});
7674}
7675case ARM::BI__builtin_arm_mve_asrl:
7676case ARM::BI__builtin_arm_mve_lsll:
7677case ARM::BI__builtin_arm_mve_sqshll:
7678case ARM::BI__builtin_arm_mve_srshrl:
7679case ARM::BI__builtin_arm_mve_uqshll:
7680case ARM::BI__builtin_arm_mve_urshrl: {
7681 Intrinsic::ID Param0;
7682 switch (BuiltinID) {
7683 case ARM::BI__builtin_arm_mve_asrl:
7684 Param0 = Intrinsic::arm_mve_asrl;
7685 break;
7686 case ARM::BI__builtin_arm_mve_lsll:
7687 Param0 = Intrinsic::arm_mve_lsll;
7688 break;
7689 case ARM::BI__builtin_arm_mve_sqshll:
7690 Param0 = Intrinsic::arm_mve_sqshll;
7691 break;
7692 case ARM::BI__builtin_arm_mve_srshrl:
7693 Param0 = Intrinsic::arm_mve_srshrl;
7694 break;
7695 case ARM::BI__builtin_arm_mve_uqshll:
7696 Param0 = Intrinsic::arm_mve_uqshll;
7697 break;
7698 case ARM::BI__builtin_arm_mve_urshrl:
7699 Param0 = Intrinsic::arm_mve_urshrl;
7700 break;
7701 }
7702 Value *Val0 = EmitScalarExpr(E->getArg(0));
7703 Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
7704 Value *Val2 = Builder.CreateLShr(Val0, Val1);
7705 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
7706 Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
7707 Value *Val5 = EmitScalarExpr(E->getArg(1));
7708 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Param0), {Val4, Val3, Val5});
7709 Value *Val7 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(1));
7710 Value *Val8 = Builder.CreateIntCast(Val7, Int64Ty, false);
7711 Value *Val9 = llvm::ConstantInt::get(Int64Ty, 32);
7712 Value *Val10 = Builder.CreateShl(Val8, Val9);
7713 Value *Val11 = Builder.CreateExtractValue(Val6, static_cast<unsigned>(0));
7714 Value *Val12 = Builder.CreateIntCast(Val11, Int64Ty, false);
7715 return Builder.CreateOr(Val10, Val12);
7716}
7717case ARM::BI__builtin_arm_mve_sqrshrl:
7718case ARM::BI__builtin_arm_mve_sqrshrl_sat48: {
7719 uint32_t Param0;
7720 switch (BuiltinID) {
7721 case ARM::BI__builtin_arm_mve_sqrshrl:
7722 Param0 = 64;
7723 break;
7724 case ARM::BI__builtin_arm_mve_sqrshrl_sat48:
7725 Param0 = 48;
7726 break;
7727 }
7728 Value *Val0 = EmitScalarExpr(E->getArg(0));
7729 Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
7730 Value *Val2 = Builder.CreateLShr(Val0, Val1);
7731 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
7732 Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
7733 Value *Val5 = EmitScalarExpr(E->getArg(1));
7734 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param0);
7735 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_sqrshrl), {Val4, Val3, Val5, Val6});
7736 Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1));
7737 Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false);
7738 Value *Val10 = llvm::ConstantInt::get(Int64Ty, 32);
7739 Value *Val11 = Builder.CreateShl(Val9, Val10);
7740 Value *Val12 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
7741 Value *Val13 = Builder.CreateIntCast(Val12, Int64Ty, false);
7742 return Builder.CreateOr(Val11, Val13);
7743}
7744case ARM::BI__builtin_arm_mve_uqrshll:
7745case ARM::BI__builtin_arm_mve_uqrshll_sat48: {
7746 uint32_t Param0;
7747 switch (BuiltinID) {
7748 case ARM::BI__builtin_arm_mve_uqrshll:
7749 Param0 = 64;
7750 break;
7751 case ARM::BI__builtin_arm_mve_uqrshll_sat48:
7752 Param0 = 48;
7753 break;
7754 }
7755 Value *Val0 = EmitScalarExpr(E->getArg(0));
7756 Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
7757 Value *Val2 = Builder.CreateLShr(Val0, Val1);
7758 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
7759 Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
7760 Value *Val5 = EmitScalarExpr(E->getArg(1));
7761 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param0);
7762 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_uqrshll), {Val4, Val3, Val5, Val6});
7763 Value *Val8 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(1));
7764 Value *Val9 = Builder.CreateIntCast(Val8, Int64Ty, false);
7765 Value *Val10 = llvm::ConstantInt::get(Int64Ty, 32);
7766 Value *Val11 = Builder.CreateShl(Val9, Val10);
7767 Value *Val12 = Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
7768 Value *Val13 = Builder.CreateIntCast(Val12, Int64Ty, false);
7769 return Builder.CreateOr(Val11, Val13);
7770}
7771case ARM::BI__builtin_arm_mve_vmlaldavaq_s16:
7772case ARM::BI__builtin_arm_mve_vmlaldavaq_s32:
7773case ARM::BI__builtin_arm_mve_vmlaldavaq_u16:
7774case ARM::BI__builtin_arm_mve_vmlaldavaq_u32:
7775case ARM::BI__builtin_arm_mve_vmlaldavaxq_s16:
7776case ARM::BI__builtin_arm_mve_vmlaldavaxq_s32:
7777case ARM::BI__builtin_arm_mve_vmlsldavaq_s16:
7778case ARM::BI__builtin_arm_mve_vmlsldavaq_s32:
7779case ARM::BI__builtin_arm_mve_vmlsldavaxq_s16:
7780case ARM::BI__builtin_arm_mve_vmlsldavaxq_s32:
7781case ARM::BI__builtin_arm_mve_vrmlaldavhaq_s32:
7782case ARM::BI__builtin_arm_mve_vrmlaldavhaq_u32:
7783case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_s32:
7784case ARM::BI__builtin_arm_mve_vrmlsldavhaq_s32:
7785case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_s32: {
7786 uint32_t Param0;
7787 uint32_t Param1;
7788 uint32_t Param2;
7789 Intrinsic::ID Param3;
7790 llvm::Type * Param4;
7791 switch (BuiltinID) {
7792 case ARM::BI__builtin_arm_mve_vmlaldavaq_s16:
7793 Param0 = 0;
7794 Param1 = 0;
7795 Param2 = 0;
7796 Param3 = Intrinsic::arm_mve_vmlldava;
7797 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
7798 break;
7799 case ARM::BI__builtin_arm_mve_vmlaldavaq_s32:
7800 Param0 = 0;
7801 Param1 = 0;
7802 Param2 = 0;
7803 Param3 = Intrinsic::arm_mve_vmlldava;
7804 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7805 break;
7806 case ARM::BI__builtin_arm_mve_vmlaldavaq_u16:
7807 Param0 = 1;
7808 Param1 = 0;
7809 Param2 = 0;
7810 Param3 = Intrinsic::arm_mve_vmlldava;
7811 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
7812 break;
7813 case ARM::BI__builtin_arm_mve_vmlaldavaq_u32:
7814 Param0 = 1;
7815 Param1 = 0;
7816 Param2 = 0;
7817 Param3 = Intrinsic::arm_mve_vmlldava;
7818 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7819 break;
7820 case ARM::BI__builtin_arm_mve_vmlaldavaxq_s16:
7821 Param0 = 0;
7822 Param1 = 0;
7823 Param2 = 1;
7824 Param3 = Intrinsic::arm_mve_vmlldava;
7825 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
7826 break;
7827 case ARM::BI__builtin_arm_mve_vmlaldavaxq_s32:
7828 Param0 = 0;
7829 Param1 = 0;
7830 Param2 = 1;
7831 Param3 = Intrinsic::arm_mve_vmlldava;
7832 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7833 break;
7834 case ARM::BI__builtin_arm_mve_vmlsldavaq_s16:
7835 Param0 = 0;
7836 Param1 = 1;
7837 Param2 = 0;
7838 Param3 = Intrinsic::arm_mve_vmlldava;
7839 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
7840 break;
7841 case ARM::BI__builtin_arm_mve_vmlsldavaq_s32:
7842 Param0 = 0;
7843 Param1 = 1;
7844 Param2 = 0;
7845 Param3 = Intrinsic::arm_mve_vmlldava;
7846 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7847 break;
7848 case ARM::BI__builtin_arm_mve_vmlsldavaxq_s16:
7849 Param0 = 0;
7850 Param1 = 1;
7851 Param2 = 1;
7852 Param3 = Intrinsic::arm_mve_vmlldava;
7853 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
7854 break;
7855 case ARM::BI__builtin_arm_mve_vmlsldavaxq_s32:
7856 Param0 = 0;
7857 Param1 = 1;
7858 Param2 = 1;
7859 Param3 = Intrinsic::arm_mve_vmlldava;
7860 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7861 break;
7862 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_s32:
7863 Param0 = 0;
7864 Param1 = 0;
7865 Param2 = 0;
7866 Param3 = Intrinsic::arm_mve_vrmlldavha;
7867 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7868 break;
7869 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_u32:
7870 Param0 = 1;
7871 Param1 = 0;
7872 Param2 = 0;
7873 Param3 = Intrinsic::arm_mve_vrmlldavha;
7874 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7875 break;
7876 case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_s32:
7877 Param0 = 0;
7878 Param1 = 0;
7879 Param2 = 1;
7880 Param3 = Intrinsic::arm_mve_vrmlldavha;
7881 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7882 break;
7883 case ARM::BI__builtin_arm_mve_vrmlsldavhaq_s32:
7884 Param0 = 0;
7885 Param1 = 1;
7886 Param2 = 0;
7887 Param3 = Intrinsic::arm_mve_vrmlldavha;
7888 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7889 break;
7890 case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_s32:
7891 Param0 = 0;
7892 Param1 = 1;
7893 Param2 = 1;
7894 Param3 = Intrinsic::arm_mve_vrmlldavha;
7895 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
7896 break;
7897 }
7898 Value *Val0 = EmitScalarExpr(E->getArg(0));
7899 Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
7900 Value *Val2 = Builder.CreateLShr(Val0, Val1);
7901 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
7902 Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
7903 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
7904 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
7905 Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param2);
7906 Value *Val8 = EmitScalarExpr(E->getArg(1));
7907 Value *Val9 = EmitScalarExpr(E->getArg(2));
7908 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4}), {Val5, Val6, Val7, Val4, Val3, Val8, Val9});
7909 Value *Val11 = Builder.CreateExtractValue(Val10, static_cast<unsigned>(1));
7910 Value *Val12 = Builder.CreateIntCast(Val11, Int64Ty, false);
7911 Value *Val13 = llvm::ConstantInt::get(Int64Ty, 32);
7912 Value *Val14 = Builder.CreateShl(Val12, Val13);
7913 Value *Val15 = Builder.CreateExtractValue(Val10, static_cast<unsigned>(0));
7914 Value *Val16 = Builder.CreateIntCast(Val15, Int64Ty, false);
7915 return Builder.CreateOr(Val14, Val16);
7916}
7917case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s16:
7918case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s32:
7919case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u16:
7920case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u32:
7921case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s16:
7922case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s32:
7923case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s16:
7924case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s32:
7925case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s16:
7926case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s32:
7927case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_s32:
7928case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_u32:
7929case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_p_s32:
7930case ARM::BI__builtin_arm_mve_vrmlsldavhaq_p_s32:
7931case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_p_s32: {
7932 uint32_t Param0;
7933 uint32_t Param1;
7934 uint32_t Param2;
7935 llvm::Type * Param3;
7936 Intrinsic::ID Param4;
7937 llvm::Type * Param5;
7938 switch (BuiltinID) {
7939 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s16:
7940 Param0 = 0;
7941 Param1 = 0;
7942 Param2 = 0;
7943 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
7944 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7945 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
7946 break;
7947 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_s32:
7948 Param0 = 0;
7949 Param1 = 0;
7950 Param2 = 0;
7951 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7952 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7953 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
7954 break;
7955 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u16:
7956 Param0 = 1;
7957 Param1 = 0;
7958 Param2 = 0;
7959 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
7960 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7961 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
7962 break;
7963 case ARM::BI__builtin_arm_mve_vmlaldavaq_p_u32:
7964 Param0 = 1;
7965 Param1 = 0;
7966 Param2 = 0;
7967 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7968 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7969 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
7970 break;
7971 case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s16:
7972 Param0 = 0;
7973 Param1 = 0;
7974 Param2 = 1;
7975 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
7976 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7977 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
7978 break;
7979 case ARM::BI__builtin_arm_mve_vmlaldavaxq_p_s32:
7980 Param0 = 0;
7981 Param1 = 0;
7982 Param2 = 1;
7983 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
7984 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7985 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
7986 break;
7987 case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s16:
7988 Param0 = 0;
7989 Param1 = 1;
7990 Param2 = 0;
7991 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
7992 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
7993 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
7994 break;
7995 case ARM::BI__builtin_arm_mve_vmlsldavaq_p_s32:
7996 Param0 = 0;
7997 Param1 = 1;
7998 Param2 = 0;
7999 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8000 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
8001 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8002 break;
8003 case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s16:
8004 Param0 = 0;
8005 Param1 = 1;
8006 Param2 = 1;
8007 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8008 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
8009 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
8010 break;
8011 case ARM::BI__builtin_arm_mve_vmlsldavaxq_p_s32:
8012 Param0 = 0;
8013 Param1 = 1;
8014 Param2 = 1;
8015 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8016 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
8017 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8018 break;
8019 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_s32:
8020 Param0 = 0;
8021 Param1 = 0;
8022 Param2 = 0;
8023 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8024 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
8025 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8026 break;
8027 case ARM::BI__builtin_arm_mve_vrmlaldavhaq_p_u32:
8028 Param0 = 1;
8029 Param1 = 0;
8030 Param2 = 0;
8031 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8032 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
8033 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8034 break;
8035 case ARM::BI__builtin_arm_mve_vrmlaldavhaxq_p_s32:
8036 Param0 = 0;
8037 Param1 = 0;
8038 Param2 = 1;
8039 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8040 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
8041 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8042 break;
8043 case ARM::BI__builtin_arm_mve_vrmlsldavhaq_p_s32:
8044 Param0 = 0;
8045 Param1 = 1;
8046 Param2 = 0;
8047 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8048 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
8049 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8050 break;
8051 case ARM::BI__builtin_arm_mve_vrmlsldavhaxq_p_s32:
8052 Param0 = 0;
8053 Param1 = 1;
8054 Param2 = 1;
8055 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8056 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
8057 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
8058 break;
8059 }
8060 Value *Val0 = EmitScalarExpr(E->getArg(0));
8061 Value *Val1 = llvm::ConstantInt::get(Int64Ty, 32);
8062 Value *Val2 = Builder.CreateLShr(Val0, Val1);
8063 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
8064 Value *Val4 = Builder.CreateIntCast(Val0, Int32Ty, false);
8065 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
8066 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
8067 Value *Val7 = llvm::ConstantInt::get(Int32Ty, Param2);
8068 Value *Val8 = EmitScalarExpr(E->getArg(1));
8069 Value *Val9 = EmitScalarExpr(E->getArg(2));
8070 Value *Val10 = EmitScalarExpr(E->getArg(3));
8071 Value *Val11 = Builder.CreateIntCast(Val10, Int32Ty, false);
8072 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val11});
8073 Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param4, {Param5, Param3}), {Val5, Val6, Val7, Val4, Val3, Val8, Val9, Val12});
8074 Value *Val14 = Builder.CreateExtractValue(Val13, static_cast<unsigned>(1));
8075 Value *Val15 = Builder.CreateIntCast(Val14, Int64Ty, false);
8076 Value *Val16 = llvm::ConstantInt::get(Int64Ty, 32);
8077 Value *Val17 = Builder.CreateShl(Val15, Val16);
8078 Value *Val18 = Builder.CreateExtractValue(Val13, static_cast<unsigned>(0));
8079 Value *Val19 = Builder.CreateIntCast(Val18, Int64Ty, false);
8080 return Builder.CreateOr(Val17, Val19);
8081}
8082case ARM::BI__builtin_arm_mve_vreinterpretq_f32_f16:
8083case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s16:
8084case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s32:
8085case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s64:
8086case ARM::BI__builtin_arm_mve_vreinterpretq_f32_s8:
8087case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u16:
8088case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u32:
8089case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u64:
8090case ARM::BI__builtin_arm_mve_vreinterpretq_f32_u8: {
8091 Value *Val0 = EmitScalarExpr(E->getArg(0));
8092 llvm::Type *Val1 = llvm::FixedVectorType::get(FloatTy, 4);
8093 return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8094}
8095case ARM::BI__builtin_arm_mve_vcvtq_f32_s32: {
8096 Value *Val0 = EmitScalarExpr(E->getArg(0));
8097 llvm::Type *Val1 = llvm::FixedVectorType::get(FloatTy, 4);
8098 return Builder.CreateSIToFP(Val0, Val1);
8099}
8100case ARM::BI__builtin_arm_mve_vcvtq_f32_u32: {
8101 Value *Val0 = EmitScalarExpr(E->getArg(0));
8102 llvm::Type *Val1 = llvm::FixedVectorType::get(FloatTy, 4);
8103 return Builder.CreateUIToFP(Val0, Val1);
8104}
8105case ARM::BI__builtin_arm_mve_vreinterpretq_f16_f32:
8106case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s16:
8107case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s32:
8108case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s64:
8109case ARM::BI__builtin_arm_mve_vreinterpretq_f16_s8:
8110case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u16:
8111case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u32:
8112case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u64:
8113case ARM::BI__builtin_arm_mve_vreinterpretq_f16_u8: {
8114 Value *Val0 = EmitScalarExpr(E->getArg(0));
8115 llvm::Type *Val1 = llvm::FixedVectorType::get(HalfTy, 8);
8116 return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8117}
8118case ARM::BI__builtin_arm_mve_vcvtq_f16_s16: {
8119 Value *Val0 = EmitScalarExpr(E->getArg(0));
8120 llvm::Type *Val1 = llvm::FixedVectorType::get(HalfTy, 8);
8121 return Builder.CreateSIToFP(Val0, Val1);
8122}
8123case ARM::BI__builtin_arm_mve_vcvtq_f16_u16: {
8124 Value *Val0 = EmitScalarExpr(E->getArg(0));
8125 llvm::Type *Val1 = llvm::FixedVectorType::get(HalfTy, 8);
8126 return Builder.CreateUIToFP(Val0, Val1);
8127}
8128case ARM::BI__builtin_arm_mve_vqnegq_s16: {
8129 Value *Val0 = EmitScalarExpr(E->getArg(0));
8130 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8131 Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, Val1);
8132 Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
8133 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8134 Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, Val4);
8135 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
8136 Value *Val7 = llvm::Constant::getNullValue(Val6);
8137 Value *Val8 = Builder.CreateSub(Val7, Val0);
8138 return Builder.CreateSelect(Val3, Val5, Val8);
8139}
8140case ARM::BI__builtin_arm_mve_vmvnq_s16:
8141case ARM::BI__builtin_arm_mve_vmvnq_u16: {
8142 Value *Val0 = EmitScalarExpr(E->getArg(0));
8143 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8144 Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, Val1);
8145 return Builder.CreateXor(Val0, Val2);
8146}
8147case ARM::BI__builtin_arm_mve_vmovntq_s16:
8148case ARM::BI__builtin_arm_mve_vmovntq_u16: {
8149 Value *Val0 = EmitScalarExpr(E->getArg(0));
8150 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8151 Value *Val2 = ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8152 Value *Val3 = EmitScalarExpr(E->getArg(1));
8153 Value *Val4 = VectorZip(Builder, Val2, Val3);
8154 llvm::Type *Val5 = llvm::FixedVectorType::get(Int8Ty, 16);
8155 return Builder.CreateTrunc(Val4, Val5);
8156}
8157case ARM::BI__builtin_arm_mve_vandq_f16: {
8158 Value *Val0 = EmitScalarExpr(E->getArg(0));
8159 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8160 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8161 Value *Val3 = EmitScalarExpr(E->getArg(1));
8162 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8163 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8164 Value *Val6 = Builder.CreateAnd(Val2, Val5);
8165 llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
8166 return Builder.CreateBitCast(Val6, Val7);
8167}
8168case ARM::BI__builtin_arm_mve_vbicq_f16: {
8169 Value *Val0 = EmitScalarExpr(E->getArg(0));
8170 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8171 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8172 Value *Val3 = EmitScalarExpr(E->getArg(1));
8173 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8174 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8175 Value *Val6 = Builder.CreateNot(Val5);
8176 Value *Val7 = Builder.CreateAnd(Val2, Val6);
8177 llvm::Type *Val8 = llvm::FixedVectorType::get(HalfTy, 8);
8178 return Builder.CreateBitCast(Val7, Val8);
8179}
8180case ARM::BI__builtin_arm_mve_vornq_f16: {
8181 Value *Val0 = EmitScalarExpr(E->getArg(0));
8182 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8183 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8184 Value *Val3 = EmitScalarExpr(E->getArg(1));
8185 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8186 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8187 Value *Val6 = Builder.CreateNot(Val5);
8188 Value *Val7 = Builder.CreateOr(Val2, Val6);
8189 llvm::Type *Val8 = llvm::FixedVectorType::get(HalfTy, 8);
8190 return Builder.CreateBitCast(Val7, Val8);
8191}
8192case ARM::BI__builtin_arm_mve_vorrq_f16: {
8193 Value *Val0 = EmitScalarExpr(E->getArg(0));
8194 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8195 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8196 Value *Val3 = EmitScalarExpr(E->getArg(1));
8197 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8198 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8199 Value *Val6 = Builder.CreateOr(Val2, Val5);
8200 llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
8201 return Builder.CreateBitCast(Val6, Val7);
8202}
8203case ARM::BI__builtin_arm_mve_veorq_f16: {
8204 Value *Val0 = EmitScalarExpr(E->getArg(0));
8205 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8206 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8207 Value *Val3 = EmitScalarExpr(E->getArg(1));
8208 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8209 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8210 Value *Val6 = Builder.CreateXor(Val2, Val5);
8211 llvm::Type *Val7 = llvm::FixedVectorType::get(HalfTy, 8);
8212 return Builder.CreateBitCast(Val6, Val7);
8213}
8214case ARM::BI__builtin_arm_mve_vqabsq_s16: {
8215 Value *Val0 = EmitScalarExpr(E->getArg(0));
8216 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8217 Value *Val2 = llvm::Constant::getNullValue(Val1);
8218 Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
8219 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8220 Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, Val4);
8221 Value *Val6 = Builder.CreateICmpEQ(Val0, Val5);
8222 llvm::Type *Val7 = llvm::FixedVectorType::get(Int16Ty, 8);
8223 Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, Val7);
8224 llvm::Type *Val9 = llvm::FixedVectorType::get(Int16Ty, 8);
8225 Value *Val10 = llvm::Constant::getNullValue(Val9);
8226 Value *Val11 = Builder.CreateSub(Val10, Val0);
8227 Value *Val12 = Builder.CreateSelect(Val6, Val8, Val11);
8228 return Builder.CreateSelect(Val3, Val0, Val12);
8229}
8230case ARM::BI__builtin_arm_mve_vabsq_s16: {
8231 Value *Val0 = EmitScalarExpr(E->getArg(0));
8232 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8233 Value *Val2 = llvm::Constant::getNullValue(Val1);
8234 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
8235 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
8236 Value *Val5 = llvm::Constant::getNullValue(Val4);
8237 Value *Val6 = Builder.CreateSub(Val5, Val0);
8238 return Builder.CreateSelect(Val3, Val6, Val0);
8239}
8240case ARM::BI__builtin_arm_mve_vreinterpretq_s16_f16:
8241case ARM::BI__builtin_arm_mve_vreinterpretq_s16_f32:
8242case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s32:
8243case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s64:
8244case ARM::BI__builtin_arm_mve_vreinterpretq_s16_s8:
8245case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u16:
8246case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u32:
8247case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u64:
8248case ARM::BI__builtin_arm_mve_vreinterpretq_s16_u8:
8249case ARM::BI__builtin_arm_mve_vreinterpretq_u16_f16:
8250case ARM::BI__builtin_arm_mve_vreinterpretq_u16_f32:
8251case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s16:
8252case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s32:
8253case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s64:
8254case ARM::BI__builtin_arm_mve_vreinterpretq_u16_s8:
8255case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u32:
8256case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u64:
8257case ARM::BI__builtin_arm_mve_vreinterpretq_u16_u8: {
8258 Value *Val0 = EmitScalarExpr(E->getArg(0));
8259 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8260 return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8261}
8262case ARM::BI__builtin_arm_mve_vcvtq_s16_f16: {
8263 Value *Val0 = EmitScalarExpr(E->getArg(0));
8264 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8265 return Builder.CreateFPToSI(Val0, Val1);
8266}
8267case ARM::BI__builtin_arm_mve_vcvtq_u16_f16: {
8268 Value *Val0 = EmitScalarExpr(E->getArg(0));
8269 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
8270 return Builder.CreateFPToUI(Val0, Val1);
8271}
8272case ARM::BI__builtin_arm_mve_vqnegq_s32: {
8273 Value *Val0 = EmitScalarExpr(E->getArg(0));
8274 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8275 Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, Val1);
8276 Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
8277 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8278 Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, Val4);
8279 llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
8280 Value *Val7 = llvm::Constant::getNullValue(Val6);
8281 Value *Val8 = Builder.CreateSub(Val7, Val0);
8282 return Builder.CreateSelect(Val3, Val5, Val8);
8283}
8284case ARM::BI__builtin_arm_mve_vmvnq_s32:
8285case ARM::BI__builtin_arm_mve_vmvnq_u32: {
8286 Value *Val0 = EmitScalarExpr(E->getArg(0));
8287 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8288 Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, Val1);
8289 return Builder.CreateXor(Val0, Val2);
8290}
8291case ARM::BI__builtin_arm_mve_vmovntq_s32:
8292case ARM::BI__builtin_arm_mve_vmovntq_u32: {
8293 Value *Val0 = EmitScalarExpr(E->getArg(0));
8294 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8295 Value *Val2 = ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8296 Value *Val3 = EmitScalarExpr(E->getArg(1));
8297 Value *Val4 = VectorZip(Builder, Val2, Val3);
8298 llvm::Type *Val5 = llvm::FixedVectorType::get(Int16Ty, 8);
8299 return Builder.CreateTrunc(Val4, Val5);
8300}
8301case ARM::BI__builtin_arm_mve_vandq_f32: {
8302 Value *Val0 = EmitScalarExpr(E->getArg(0));
8303 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8304 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8305 Value *Val3 = EmitScalarExpr(E->getArg(1));
8306 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8307 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8308 Value *Val6 = Builder.CreateAnd(Val2, Val5);
8309 llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
8310 return Builder.CreateBitCast(Val6, Val7);
8311}
8312case ARM::BI__builtin_arm_mve_vbicq_f32: {
8313 Value *Val0 = EmitScalarExpr(E->getArg(0));
8314 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8315 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8316 Value *Val3 = EmitScalarExpr(E->getArg(1));
8317 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8318 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8319 Value *Val6 = Builder.CreateNot(Val5);
8320 Value *Val7 = Builder.CreateAnd(Val2, Val6);
8321 llvm::Type *Val8 = llvm::FixedVectorType::get(FloatTy, 4);
8322 return Builder.CreateBitCast(Val7, Val8);
8323}
8324case ARM::BI__builtin_arm_mve_vornq_f32: {
8325 Value *Val0 = EmitScalarExpr(E->getArg(0));
8326 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8327 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8328 Value *Val3 = EmitScalarExpr(E->getArg(1));
8329 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8330 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8331 Value *Val6 = Builder.CreateNot(Val5);
8332 Value *Val7 = Builder.CreateOr(Val2, Val6);
8333 llvm::Type *Val8 = llvm::FixedVectorType::get(FloatTy, 4);
8334 return Builder.CreateBitCast(Val7, Val8);
8335}
8336case ARM::BI__builtin_arm_mve_vorrq_f32: {
8337 Value *Val0 = EmitScalarExpr(E->getArg(0));
8338 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8339 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8340 Value *Val3 = EmitScalarExpr(E->getArg(1));
8341 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8342 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8343 Value *Val6 = Builder.CreateOr(Val2, Val5);
8344 llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
8345 return Builder.CreateBitCast(Val6, Val7);
8346}
8347case ARM::BI__builtin_arm_mve_veorq_f32: {
8348 Value *Val0 = EmitScalarExpr(E->getArg(0));
8349 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8350 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
8351 Value *Val3 = EmitScalarExpr(E->getArg(1));
8352 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8353 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
8354 Value *Val6 = Builder.CreateXor(Val2, Val5);
8355 llvm::Type *Val7 = llvm::FixedVectorType::get(FloatTy, 4);
8356 return Builder.CreateBitCast(Val6, Val7);
8357}
8358case ARM::BI__builtin_arm_mve_vqabsq_s32: {
8359 Value *Val0 = EmitScalarExpr(E->getArg(0));
8360 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8361 Value *Val2 = llvm::Constant::getNullValue(Val1);
8362 Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
8363 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8364 Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, Val4);
8365 Value *Val6 = Builder.CreateICmpEQ(Val0, Val5);
8366 llvm::Type *Val7 = llvm::FixedVectorType::get(Int32Ty, 4);
8367 Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, Val7);
8368 llvm::Type *Val9 = llvm::FixedVectorType::get(Int32Ty, 4);
8369 Value *Val10 = llvm::Constant::getNullValue(Val9);
8370 Value *Val11 = Builder.CreateSub(Val10, Val0);
8371 Value *Val12 = Builder.CreateSelect(Val6, Val8, Val11);
8372 return Builder.CreateSelect(Val3, Val0, Val12);
8373}
8374case ARM::BI__builtin_arm_mve_vabsq_s32: {
8375 Value *Val0 = EmitScalarExpr(E->getArg(0));
8376 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8377 Value *Val2 = llvm::Constant::getNullValue(Val1);
8378 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
8379 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
8380 Value *Val5 = llvm::Constant::getNullValue(Val4);
8381 Value *Val6 = Builder.CreateSub(Val5, Val0);
8382 return Builder.CreateSelect(Val3, Val6, Val0);
8383}
8384case ARM::BI__builtin_arm_mve_vreinterpretq_s32_f16:
8385case ARM::BI__builtin_arm_mve_vreinterpretq_s32_f32:
8386case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s16:
8387case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s64:
8388case ARM::BI__builtin_arm_mve_vreinterpretq_s32_s8:
8389case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u16:
8390case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u32:
8391case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u64:
8392case ARM::BI__builtin_arm_mve_vreinterpretq_s32_u8:
8393case ARM::BI__builtin_arm_mve_vreinterpretq_u32_f16:
8394case ARM::BI__builtin_arm_mve_vreinterpretq_u32_f32:
8395case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s16:
8396case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s32:
8397case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s64:
8398case ARM::BI__builtin_arm_mve_vreinterpretq_u32_s8:
8399case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u16:
8400case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u64:
8401case ARM::BI__builtin_arm_mve_vreinterpretq_u32_u8: {
8402 Value *Val0 = EmitScalarExpr(E->getArg(0));
8403 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8404 return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8405}
8406case ARM::BI__builtin_arm_mve_vcvtq_s32_f32: {
8407 Value *Val0 = EmitScalarExpr(E->getArg(0));
8408 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8409 return Builder.CreateFPToSI(Val0, Val1);
8410}
8411case ARM::BI__builtin_arm_mve_vcvtq_u32_f32: {
8412 Value *Val0 = EmitScalarExpr(E->getArg(0));
8413 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
8414 return Builder.CreateFPToUI(Val0, Val1);
8415}
8416case ARM::BI__builtin_arm_mve_vreinterpretq_s64_f16:
8417case ARM::BI__builtin_arm_mve_vreinterpretq_s64_f32:
8418case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s16:
8419case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s32:
8420case ARM::BI__builtin_arm_mve_vreinterpretq_s64_s8:
8421case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u16:
8422case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u32:
8423case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u64:
8424case ARM::BI__builtin_arm_mve_vreinterpretq_s64_u8:
8425case ARM::BI__builtin_arm_mve_vreinterpretq_u64_f16:
8426case ARM::BI__builtin_arm_mve_vreinterpretq_u64_f32:
8427case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s16:
8428case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s32:
8429case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s64:
8430case ARM::BI__builtin_arm_mve_vreinterpretq_u64_s8:
8431case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u16:
8432case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u32:
8433case ARM::BI__builtin_arm_mve_vreinterpretq_u64_u8: {
8434 Value *Val0 = EmitScalarExpr(E->getArg(0));
8435 llvm::Type *Val1 = llvm::FixedVectorType::get(Int64Ty, 2);
8436 return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8437}
8438case ARM::BI__builtin_arm_mve_vqnegq_s8: {
8439 Value *Val0 = EmitScalarExpr(E->getArg(0));
8440 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
8441 Value *Val2 = ARMMVEConstantSplat<1,0>(Builder, Val1);
8442 Value *Val3 = Builder.CreateICmpEQ(Val0, Val2);
8443 llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
8444 Value *Val5 = ARMMVEConstantSplat<0,1>(Builder, Val4);
8445 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
8446 Value *Val7 = llvm::Constant::getNullValue(Val6);
8447 Value *Val8 = Builder.CreateSub(Val7, Val0);
8448 return Builder.CreateSelect(Val3, Val5, Val8);
8449}
8450case ARM::BI__builtin_arm_mve_vmvnq_s8:
8451case ARM::BI__builtin_arm_mve_vmvnq_u8: {
8452 Value *Val0 = EmitScalarExpr(E->getArg(0));
8453 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
8454 Value *Val2 = ARMMVEConstantSplat<1,1>(Builder, Val1);
8455 return Builder.CreateXor(Val0, Val2);
8456}
8457case ARM::BI__builtin_arm_mve_vqabsq_s8: {
8458 Value *Val0 = EmitScalarExpr(E->getArg(0));
8459 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
8460 Value *Val2 = llvm::Constant::getNullValue(Val1);
8461 Value *Val3 = Builder.CreateICmpSGT(Val0, Val2);
8462 llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
8463 Value *Val5 = ARMMVEConstantSplat<1,0>(Builder, Val4);
8464 Value *Val6 = Builder.CreateICmpEQ(Val0, Val5);
8465 llvm::Type *Val7 = llvm::FixedVectorType::get(Int8Ty, 16);
8466 Value *Val8 = ARMMVEConstantSplat<0,1>(Builder, Val7);
8467 llvm::Type *Val9 = llvm::FixedVectorType::get(Int8Ty, 16);
8468 Value *Val10 = llvm::Constant::getNullValue(Val9);
8469 Value *Val11 = Builder.CreateSub(Val10, Val0);
8470 Value *Val12 = Builder.CreateSelect(Val6, Val8, Val11);
8471 return Builder.CreateSelect(Val3, Val0, Val12);
8472}
8473case ARM::BI__builtin_arm_mve_vabsq_s8: {
8474 Value *Val0 = EmitScalarExpr(E->getArg(0));
8475 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
8476 Value *Val2 = llvm::Constant::getNullValue(Val1);
8477 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
8478 llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
8479 Value *Val5 = llvm::Constant::getNullValue(Val4);
8480 Value *Val6 = Builder.CreateSub(Val5, Val0);
8481 return Builder.CreateSelect(Val3, Val6, Val0);
8482}
8483case ARM::BI__builtin_arm_mve_vreinterpretq_s8_f16:
8484case ARM::BI__builtin_arm_mve_vreinterpretq_s8_f32:
8485case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s16:
8486case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s32:
8487case ARM::BI__builtin_arm_mve_vreinterpretq_s8_s64:
8488case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u16:
8489case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u32:
8490case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u64:
8491case ARM::BI__builtin_arm_mve_vreinterpretq_s8_u8:
8492case ARM::BI__builtin_arm_mve_vreinterpretq_u8_f16:
8493case ARM::BI__builtin_arm_mve_vreinterpretq_u8_f32:
8494case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s16:
8495case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s32:
8496case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s64:
8497case ARM::BI__builtin_arm_mve_vreinterpretq_u8_s8:
8498case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u16:
8499case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u32:
8500case ARM::BI__builtin_arm_mve_vreinterpretq_u8_u64: {
8501 Value *Val0 = EmitScalarExpr(E->getArg(0));
8502 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
8503 return ARMMVEVectorReinterpret(Builder, this, Val0, Val1);
8504}
8505case ARM::BI__builtin_arm_mve_vrev16q_s8:
8506case ARM::BI__builtin_arm_mve_vrev16q_u8:
8507case ARM::BI__builtin_arm_mve_vrev32q_f16:
8508case ARM::BI__builtin_arm_mve_vrev32q_s16:
8509case ARM::BI__builtin_arm_mve_vrev32q_s8:
8510case ARM::BI__builtin_arm_mve_vrev32q_u16:
8511case ARM::BI__builtin_arm_mve_vrev32q_u8:
8512case ARM::BI__builtin_arm_mve_vrev64q_f16:
8513case ARM::BI__builtin_arm_mve_vrev64q_f32:
8514case ARM::BI__builtin_arm_mve_vrev64q_s16:
8515case ARM::BI__builtin_arm_mve_vrev64q_s32:
8516case ARM::BI__builtin_arm_mve_vrev64q_s8:
8517case ARM::BI__builtin_arm_mve_vrev64q_u16:
8518case ARM::BI__builtin_arm_mve_vrev64q_u32:
8519case ARM::BI__builtin_arm_mve_vrev64q_u8: {
8520 unsigned Param0;
8521 switch (BuiltinID) {
8522 case ARM::BI__builtin_arm_mve_vrev16q_s8:
8523 Param0 = 16;
8524 break;
8525 case ARM::BI__builtin_arm_mve_vrev16q_u8:
8526 Param0 = 16;
8527 break;
8528 case ARM::BI__builtin_arm_mve_vrev32q_f16:
8529 Param0 = 32;
8530 break;
8531 case ARM::BI__builtin_arm_mve_vrev32q_s16:
8532 Param0 = 32;
8533 break;
8534 case ARM::BI__builtin_arm_mve_vrev32q_s8:
8535 Param0 = 32;
8536 break;
8537 case ARM::BI__builtin_arm_mve_vrev32q_u16:
8538 Param0 = 32;
8539 break;
8540 case ARM::BI__builtin_arm_mve_vrev32q_u8:
8541 Param0 = 32;
8542 break;
8543 case ARM::BI__builtin_arm_mve_vrev64q_f16:
8544 Param0 = 64;
8545 break;
8546 case ARM::BI__builtin_arm_mve_vrev64q_f32:
8547 Param0 = 64;
8548 break;
8549 case ARM::BI__builtin_arm_mve_vrev64q_s16:
8550 Param0 = 64;
8551 break;
8552 case ARM::BI__builtin_arm_mve_vrev64q_s32:
8553 Param0 = 64;
8554 break;
8555 case ARM::BI__builtin_arm_mve_vrev64q_s8:
8556 Param0 = 64;
8557 break;
8558 case ARM::BI__builtin_arm_mve_vrev64q_u16:
8559 Param0 = 64;
8560 break;
8561 case ARM::BI__builtin_arm_mve_vrev64q_u32:
8562 Param0 = 64;
8563 break;
8564 case ARM::BI__builtin_arm_mve_vrev64q_u8:
8565 Param0 = 64;
8566 break;
8567 }
8568 Value *Val0 = EmitScalarExpr(E->getArg(0));
8569 return ARMMVEVectorElementReverse(Builder, Val0, static_cast<unsigned>(Param0));
8570}
8571case ARM::BI__builtin_arm_mve_vdupq_n_f16:
8572case ARM::BI__builtin_arm_mve_vdupq_n_f32:
8573case ARM::BI__builtin_arm_mve_vdupq_n_s16:
8574case ARM::BI__builtin_arm_mve_vdupq_n_s32:
8575case ARM::BI__builtin_arm_mve_vdupq_n_s8:
8576case ARM::BI__builtin_arm_mve_vdupq_n_u16:
8577case ARM::BI__builtin_arm_mve_vdupq_n_u32:
8578case ARM::BI__builtin_arm_mve_vdupq_n_u8: {
8579 Value *Val0 = EmitScalarExpr(E->getArg(0));
8580 return ARMMVEVectorSplat(Builder, Val0);
8581}
8582case ARM::BI__builtin_arm_mve_vabsq_f16:
8583case ARM::BI__builtin_arm_mve_vabsq_f32:
8584case ARM::BI__builtin_arm_mve_vclsq_s16:
8585case ARM::BI__builtin_arm_mve_vclsq_s32:
8586case ARM::BI__builtin_arm_mve_vclsq_s8:
8587case ARM::BI__builtin_arm_mve_vrndaq_f16:
8588case ARM::BI__builtin_arm_mve_vrndaq_f32:
8589case ARM::BI__builtin_arm_mve_vrndmq_f16:
8590case ARM::BI__builtin_arm_mve_vrndmq_f32:
8591case ARM::BI__builtin_arm_mve_vrndnq_f16:
8592case ARM::BI__builtin_arm_mve_vrndnq_f32:
8593case ARM::BI__builtin_arm_mve_vrndpq_f16:
8594case ARM::BI__builtin_arm_mve_vrndpq_f32:
8595case ARM::BI__builtin_arm_mve_vrndq_f16:
8596case ARM::BI__builtin_arm_mve_vrndq_f32:
8597case ARM::BI__builtin_arm_mve_vrndxq_f16:
8598case ARM::BI__builtin_arm_mve_vrndxq_f32: {
8599 Intrinsic::ID Param0;
8600 llvm::Type * Param1;
8601 switch (BuiltinID) {
8602 case ARM::BI__builtin_arm_mve_vabsq_f16:
8603 Param0 = Intrinsic::fabs;
8604 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8605 break;
8606 case ARM::BI__builtin_arm_mve_vabsq_f32:
8607 Param0 = Intrinsic::fabs;
8608 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8609 break;
8610 case ARM::BI__builtin_arm_mve_vclsq_s16:
8611 Param0 = Intrinsic::arm_mve_vcls;
8612 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
8613 break;
8614 case ARM::BI__builtin_arm_mve_vclsq_s32:
8615 Param0 = Intrinsic::arm_mve_vcls;
8616 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
8617 break;
8618 case ARM::BI__builtin_arm_mve_vclsq_s8:
8619 Param0 = Intrinsic::arm_mve_vcls;
8620 Param1 = llvm::FixedVectorType::get(Int8Ty, 16);
8621 break;
8622 case ARM::BI__builtin_arm_mve_vrndaq_f16:
8623 Param0 = Intrinsic::round;
8624 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8625 break;
8626 case ARM::BI__builtin_arm_mve_vrndaq_f32:
8627 Param0 = Intrinsic::round;
8628 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8629 break;
8630 case ARM::BI__builtin_arm_mve_vrndmq_f16:
8631 Param0 = Intrinsic::floor;
8632 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8633 break;
8634 case ARM::BI__builtin_arm_mve_vrndmq_f32:
8635 Param0 = Intrinsic::floor;
8636 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8637 break;
8638 case ARM::BI__builtin_arm_mve_vrndnq_f16:
8639 Param0 = Intrinsic::arm_mve_vrintn;
8640 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8641 break;
8642 case ARM::BI__builtin_arm_mve_vrndnq_f32:
8643 Param0 = Intrinsic::arm_mve_vrintn;
8644 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8645 break;
8646 case ARM::BI__builtin_arm_mve_vrndpq_f16:
8647 Param0 = Intrinsic::ceil;
8648 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8649 break;
8650 case ARM::BI__builtin_arm_mve_vrndpq_f32:
8651 Param0 = Intrinsic::ceil;
8652 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8653 break;
8654 case ARM::BI__builtin_arm_mve_vrndq_f16:
8655 Param0 = Intrinsic::trunc;
8656 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8657 break;
8658 case ARM::BI__builtin_arm_mve_vrndq_f32:
8659 Param0 = Intrinsic::trunc;
8660 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8661 break;
8662 case ARM::BI__builtin_arm_mve_vrndxq_f16:
8663 Param0 = Intrinsic::rint;
8664 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8665 break;
8666 case ARM::BI__builtin_arm_mve_vrndxq_f32:
8667 Param0 = Intrinsic::rint;
8668 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8669 break;
8670 }
8671 Value *Val0 = EmitScalarExpr(E->getArg(0));
8672 return Builder.CreateCall(CGM.getIntrinsic(Param0, {Param1}), {Val0});
8673}
8674case ARM::BI__builtin_arm_mve_vnegq_f16:
8675case ARM::BI__builtin_arm_mve_vnegq_f32: {
8676 Value *Val0 = EmitScalarExpr(E->getArg(0));
8677 return Builder.CreateFNeg(Val0);
8678}
8679case ARM::BI__builtin_arm_mve_vshrq_n_s16:
8680case ARM::BI__builtin_arm_mve_vshrq_n_s32:
8681case ARM::BI__builtin_arm_mve_vshrq_n_s8:
8682case ARM::BI__builtin_arm_mve_vshrq_n_u16:
8683case ARM::BI__builtin_arm_mve_vshrq_n_u32:
8684case ARM::BI__builtin_arm_mve_vshrq_n_u8: {
8685 bool Param0;
8686 switch (BuiltinID) {
8687 case ARM::BI__builtin_arm_mve_vshrq_n_s16:
8688 Param0 = 0;
8689 break;
8690 case ARM::BI__builtin_arm_mve_vshrq_n_s32:
8691 Param0 = 0;
8692 break;
8693 case ARM::BI__builtin_arm_mve_vshrq_n_s8:
8694 Param0 = 0;
8695 break;
8696 case ARM::BI__builtin_arm_mve_vshrq_n_u16:
8697 Param0 = 1;
8698 break;
8699 case ARM::BI__builtin_arm_mve_vshrq_n_u32:
8700 Param0 = 1;
8701 break;
8702 case ARM::BI__builtin_arm_mve_vshrq_n_u8:
8703 Param0 = 1;
8704 break;
8705 }
8706 Value *Val0 = EmitScalarExpr(E->getArg(0));
8707 return MVEImmediateShr(Builder, Val0, GetIntegerConstantValue<unsigned>(E->getArg(1), getContext()), static_cast<bool>(Param0));
8708}
8709case ARM::BI__builtin_arm_mve_vst1q_f16:
8710case ARM::BI__builtin_arm_mve_vst1q_s16:
8711case ARM::BI__builtin_arm_mve_vst1q_u16:
8712case ARM::BI__builtin_arm_mve_vstrhq_f16:
8713case ARM::BI__builtin_arm_mve_vstrhq_s16:
8714case ARM::BI__builtin_arm_mve_vstrhq_u16: {
8715 llvm::Type * Param0;
8716 switch (BuiltinID) {
8717 case ARM::BI__builtin_arm_mve_vst1q_f16:
8718 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
8719 break;
8720 case ARM::BI__builtin_arm_mve_vst1q_s16:
8721 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8722 break;
8723 case ARM::BI__builtin_arm_mve_vst1q_u16:
8724 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8725 break;
8726 case ARM::BI__builtin_arm_mve_vstrhq_f16:
8727 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
8728 break;
8729 case ARM::BI__builtin_arm_mve_vstrhq_s16:
8730 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8731 break;
8732 case ARM::BI__builtin_arm_mve_vstrhq_u16:
8733 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8734 break;
8735 }
8736 Value *Val0 = EmitScalarExpr(E->getArg(1));
8737 Address Val1 = EmitPointerWithAlignment(E->getArg(0));
8738 Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), Param0);
8739 Address Val3 = Address(Val2, CharUnits::fromQuantity(2));
8740 return Builder.CreateStore(Val0, Val3);
8741}
8742case ARM::BI__builtin_arm_mve_vst1q_f32:
8743case ARM::BI__builtin_arm_mve_vst1q_s32:
8744case ARM::BI__builtin_arm_mve_vst1q_u32:
8745case ARM::BI__builtin_arm_mve_vstrwq_f32:
8746case ARM::BI__builtin_arm_mve_vstrwq_s32:
8747case ARM::BI__builtin_arm_mve_vstrwq_u32: {
8748 llvm::Type * Param0;
8749 switch (BuiltinID) {
8750 case ARM::BI__builtin_arm_mve_vst1q_f32:
8751 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
8752 break;
8753 case ARM::BI__builtin_arm_mve_vst1q_s32:
8754 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8755 break;
8756 case ARM::BI__builtin_arm_mve_vst1q_u32:
8757 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8758 break;
8759 case ARM::BI__builtin_arm_mve_vstrwq_f32:
8760 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
8761 break;
8762 case ARM::BI__builtin_arm_mve_vstrwq_s32:
8763 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8764 break;
8765 case ARM::BI__builtin_arm_mve_vstrwq_u32:
8766 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8767 break;
8768 }
8769 Value *Val0 = EmitScalarExpr(E->getArg(1));
8770 Address Val1 = EmitPointerWithAlignment(E->getArg(0));
8771 Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), Param0);
8772 Address Val3 = Address(Val2, CharUnits::fromQuantity(4));
8773 return Builder.CreateStore(Val0, Val3);
8774}
8775case ARM::BI__builtin_arm_mve_vst1q_p_f16:
8776case ARM::BI__builtin_arm_mve_vst1q_p_f32:
8777case ARM::BI__builtin_arm_mve_vst1q_p_s16:
8778case ARM::BI__builtin_arm_mve_vst1q_p_s32:
8779case ARM::BI__builtin_arm_mve_vst1q_p_s8:
8780case ARM::BI__builtin_arm_mve_vst1q_p_u16:
8781case ARM::BI__builtin_arm_mve_vst1q_p_u32:
8782case ARM::BI__builtin_arm_mve_vst1q_p_u8:
8783case ARM::BI__builtin_arm_mve_vstrbq_p_s8:
8784case ARM::BI__builtin_arm_mve_vstrbq_p_u8:
8785case ARM::BI__builtin_arm_mve_vstrhq_p_f16:
8786case ARM::BI__builtin_arm_mve_vstrhq_p_s16:
8787case ARM::BI__builtin_arm_mve_vstrhq_p_u16:
8788case ARM::BI__builtin_arm_mve_vstrwq_p_f32:
8789case ARM::BI__builtin_arm_mve_vstrwq_p_s32:
8790case ARM::BI__builtin_arm_mve_vstrwq_p_u32: {
8791 llvm::Type * Param0;
8792 uint32_t Param1;
8793 llvm::Type * Param2;
8794 llvm::Type * Param3;
8795 switch (BuiltinID) {
8796 case ARM::BI__builtin_arm_mve_vst1q_p_f16:
8797 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
8798 Param1 = 2;
8799 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8800 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
8801 break;
8802 case ARM::BI__builtin_arm_mve_vst1q_p_f32:
8803 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
8804 Param1 = 4;
8805 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8806 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
8807 break;
8808 case ARM::BI__builtin_arm_mve_vst1q_p_s16:
8809 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8810 Param1 = 2;
8811 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8812 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
8813 break;
8814 case ARM::BI__builtin_arm_mve_vst1q_p_s32:
8815 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8816 Param1 = 4;
8817 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8818 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
8819 break;
8820 case ARM::BI__builtin_arm_mve_vst1q_p_s8:
8821 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
8822 Param1 = 1;
8823 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
8824 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
8825 break;
8826 case ARM::BI__builtin_arm_mve_vst1q_p_u16:
8827 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8828 Param1 = 2;
8829 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8830 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
8831 break;
8832 case ARM::BI__builtin_arm_mve_vst1q_p_u32:
8833 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8834 Param1 = 4;
8835 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8836 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
8837 break;
8838 case ARM::BI__builtin_arm_mve_vst1q_p_u8:
8839 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
8840 Param1 = 1;
8841 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
8842 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
8843 break;
8844 case ARM::BI__builtin_arm_mve_vstrbq_p_s8:
8845 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
8846 Param1 = 1;
8847 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
8848 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
8849 break;
8850 case ARM::BI__builtin_arm_mve_vstrbq_p_u8:
8851 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16));
8852 Param1 = 1;
8853 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
8854 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
8855 break;
8856 case ARM::BI__builtin_arm_mve_vstrhq_p_f16:
8857 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(HalfTy, 8));
8858 Param1 = 2;
8859 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8860 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
8861 break;
8862 case ARM::BI__builtin_arm_mve_vstrhq_p_s16:
8863 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8864 Param1 = 2;
8865 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8866 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
8867 break;
8868 case ARM::BI__builtin_arm_mve_vstrhq_p_u16:
8869 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 8));
8870 Param1 = 2;
8871 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8872 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
8873 break;
8874 case ARM::BI__builtin_arm_mve_vstrwq_p_f32:
8875 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(FloatTy, 4));
8876 Param1 = 4;
8877 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8878 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
8879 break;
8880 case ARM::BI__builtin_arm_mve_vstrwq_p_s32:
8881 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8882 Param1 = 4;
8883 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8884 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
8885 break;
8886 case ARM::BI__builtin_arm_mve_vstrwq_p_u32:
8887 Param0 = llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int32Ty, 4));
8888 Param1 = 4;
8889 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8890 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
8891 break;
8892 }
8893 Value *Val0 = EmitScalarExpr(E->getArg(1));
8894 Address Val1 = EmitPointerWithAlignment(E->getArg(0));
8895 Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), Param0);
8896 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
8897 Value *Val4 = EmitScalarExpr(E->getArg(2));
8898 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
8899 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val5});
8900 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {Param3, Param0}), {Val0, Val2, Val3, Val6});
8901}
8902case ARM::BI__builtin_arm_mve_vst1q_s8:
8903case ARM::BI__builtin_arm_mve_vst1q_u8:
8904case ARM::BI__builtin_arm_mve_vstrbq_s8:
8905case ARM::BI__builtin_arm_mve_vstrbq_u8: {
8906 Value *Val0 = EmitScalarExpr(E->getArg(1));
8907 Address Val1 = EmitPointerWithAlignment(E->getArg(0));
8908 Value *Val2 = Builder.CreatePointerCast((Val1.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 16)));
8909 Address Val3 = Address(Val2, CharUnits::fromQuantity(1));
8910 return Builder.CreateStore(Val0, Val3);
8911}
8912case ARM::BI__builtin_arm_mve_vctp16q_m:
8913case ARM::BI__builtin_arm_mve_vctp32q_m:
8914case ARM::BI__builtin_arm_mve_vctp64q_m:
8915case ARM::BI__builtin_arm_mve_vctp8q_m: {
8916 llvm::Type * Param0;
8917 Intrinsic::ID Param1;
8918 switch (BuiltinID) {
8919 case ARM::BI__builtin_arm_mve_vctp16q_m:
8920 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8921 Param1 = Intrinsic::arm_mve_vctp16;
8922 break;
8923 case ARM::BI__builtin_arm_mve_vctp32q_m:
8924 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8925 Param1 = Intrinsic::arm_mve_vctp32;
8926 break;
8927 case ARM::BI__builtin_arm_mve_vctp64q_m:
8928 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8929 Param1 = Intrinsic::arm_mve_vctp64;
8930 break;
8931 case ARM::BI__builtin_arm_mve_vctp8q_m:
8932 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
8933 Param1 = Intrinsic::arm_mve_vctp8;
8934 break;
8935 }
8936 Value *Val0 = EmitScalarExpr(E->getArg(1));
8937 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
8938 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
8939 Value *Val3 = EmitScalarExpr(E->getArg(0));
8940 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Param1), {Val3});
8941 Value *Val5 = Builder.CreateAnd(Val2, Val4);
8942 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val5});
8943 return Builder.CreateIntCast(Val6, Int16Ty, false);
8944}
8945case ARM::BI__builtin_arm_mve_vmovnbq_s16:
8946case ARM::BI__builtin_arm_mve_vmovnbq_u16: {
8947 Value *Val0 = EmitScalarExpr(E->getArg(1));
8948 Value *Val1 = EmitScalarExpr(E->getArg(0));
8949 Value *Val2 = ARMMVEVectorElementReverse(Builder, Val1, static_cast<unsigned>(16));
8950 llvm::Type *Val3 = llvm::FixedVectorType::get(Int16Ty, 8);
8951 Value *Val4 = ARMMVEVectorReinterpret(Builder, this, Val2, Val3);
8952 Value *Val5 = VectorZip(Builder, Val0, Val4);
8953 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
8954 return Builder.CreateTrunc(Val5, Val6);
8955}
8956case ARM::BI__builtin_arm_mve_vmovnbq_s32:
8957case ARM::BI__builtin_arm_mve_vmovnbq_u32: {
8958 Value *Val0 = EmitScalarExpr(E->getArg(1));
8959 Value *Val1 = EmitScalarExpr(E->getArg(0));
8960 Value *Val2 = ARMMVEVectorElementReverse(Builder, Val1, static_cast<unsigned>(32));
8961 llvm::Type *Val3 = llvm::FixedVectorType::get(Int32Ty, 4);
8962 Value *Val4 = ARMMVEVectorReinterpret(Builder, this, Val2, Val3);
8963 Value *Val5 = VectorZip(Builder, Val0, Val4);
8964 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
8965 return Builder.CreateTrunc(Val5, Val6);
8966}
8967case ARM::BI__builtin_arm_mve_vsetq_lane_f16:
8968case ARM::BI__builtin_arm_mve_vsetq_lane_f32:
8969case ARM::BI__builtin_arm_mve_vsetq_lane_s16:
8970case ARM::BI__builtin_arm_mve_vsetq_lane_s32:
8971case ARM::BI__builtin_arm_mve_vsetq_lane_s64:
8972case ARM::BI__builtin_arm_mve_vsetq_lane_s8:
8973case ARM::BI__builtin_arm_mve_vsetq_lane_u16:
8974case ARM::BI__builtin_arm_mve_vsetq_lane_u32:
8975case ARM::BI__builtin_arm_mve_vsetq_lane_u64:
8976case ARM::BI__builtin_arm_mve_vsetq_lane_u8: {
8977 Value *Val0 = EmitScalarExpr(E->getArg(1));
8978 Value *Val1 = EmitScalarExpr(E->getArg(0));
8979 Value *Val2 = EmitScalarExpr(E->getArg(2));
8980 return Builder.CreateInsertElement(Val0, Val1, Val2);
8981}
8982case ARM::BI__builtin_arm_mve_vfmaq_m_f16:
8983case ARM::BI__builtin_arm_mve_vfmaq_m_f32: {
8984 llvm::Type * Param0;
8985 llvm::Type * Param1;
8986 switch (BuiltinID) {
8987 case ARM::BI__builtin_arm_mve_vfmaq_m_f16:
8988 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
8989 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
8990 break;
8991 case ARM::BI__builtin_arm_mve_vfmaq_m_f32:
8992 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
8993 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
8994 break;
8995 }
8996 Value *Val0 = EmitScalarExpr(E->getArg(1));
8997 Value *Val1 = EmitScalarExpr(E->getArg(2));
8998 Value *Val2 = (Val1);
8999 Value *Val3 = EmitScalarExpr(E->getArg(0));
9000 Value *Val4 = EmitScalarExpr(E->getArg(3));
9001 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
9002 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
9003 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val0, Val2, Val3, Val6});
9004}
9005case ARM::BI__builtin_arm_mve_vfmaq_f16:
9006case ARM::BI__builtin_arm_mve_vfmaq_f32: {
9007 llvm::Type * Param0;
9008 switch (BuiltinID) {
9009 case ARM::BI__builtin_arm_mve_vfmaq_f16:
9010 Param0 = llvm::FixedVectorType::get(HalfTy, 8);
9011 break;
9012 case ARM::BI__builtin_arm_mve_vfmaq_f32:
9013 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
9014 break;
9015 }
9016 Value *Val0 = EmitScalarExpr(E->getArg(1));
9017 Value *Val1 = EmitScalarExpr(E->getArg(2));
9018 Value *Val2 = (Val1);
9019 Value *Val3 = EmitScalarExpr(E->getArg(0));
9020 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val0, Val2, Val3});
9021}
9022case ARM::BI__builtin_arm_mve_vmlaq_n_s16:
9023case ARM::BI__builtin_arm_mve_vmlaq_n_s32:
9024case ARM::BI__builtin_arm_mve_vmlaq_n_s8:
9025case ARM::BI__builtin_arm_mve_vmlaq_n_u16:
9026case ARM::BI__builtin_arm_mve_vmlaq_n_u32:
9027case ARM::BI__builtin_arm_mve_vmlaq_n_u8: {
9028 Value *Val0 = EmitScalarExpr(E->getArg(1));
9029 Value *Val1 = EmitScalarExpr(E->getArg(2));
9030 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
9031 Value *Val3 = Builder.CreateMul(Val0, Val2);
9032 Value *Val4 = EmitScalarExpr(E->getArg(0));
9033 return Builder.CreateAdd(Val3, Val4);
9034}
9035case ARM::BI__builtin_arm_mve_vaddq_m_n_f16:
9036case ARM::BI__builtin_arm_mve_vaddq_m_n_f32:
9037case ARM::BI__builtin_arm_mve_vaddq_m_n_s16:
9038case ARM::BI__builtin_arm_mve_vaddq_m_n_s32:
9039case ARM::BI__builtin_arm_mve_vaddq_m_n_s8:
9040case ARM::BI__builtin_arm_mve_vaddq_m_n_u16:
9041case ARM::BI__builtin_arm_mve_vaddq_m_n_u32:
9042case ARM::BI__builtin_arm_mve_vaddq_m_n_u8:
9043case ARM::BI__builtin_arm_mve_vmulq_m_n_f16:
9044case ARM::BI__builtin_arm_mve_vmulq_m_n_f32:
9045case ARM::BI__builtin_arm_mve_vmulq_m_n_s16:
9046case ARM::BI__builtin_arm_mve_vmulq_m_n_s32:
9047case ARM::BI__builtin_arm_mve_vmulq_m_n_s8:
9048case ARM::BI__builtin_arm_mve_vmulq_m_n_u16:
9049case ARM::BI__builtin_arm_mve_vmulq_m_n_u32:
9050case ARM::BI__builtin_arm_mve_vmulq_m_n_u8:
9051case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s16:
9052case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s32:
9053case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s8:
9054case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s16:
9055case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s32:
9056case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s8:
9057case ARM::BI__builtin_arm_mve_vsubq_m_n_f16:
9058case ARM::BI__builtin_arm_mve_vsubq_m_n_f32:
9059case ARM::BI__builtin_arm_mve_vsubq_m_n_s16:
9060case ARM::BI__builtin_arm_mve_vsubq_m_n_s32:
9061case ARM::BI__builtin_arm_mve_vsubq_m_n_s8:
9062case ARM::BI__builtin_arm_mve_vsubq_m_n_u16:
9063case ARM::BI__builtin_arm_mve_vsubq_m_n_u32:
9064case ARM::BI__builtin_arm_mve_vsubq_m_n_u8: {
9065 llvm::Type * Param0;
9066 Intrinsic::ID Param1;
9067 llvm::Type * Param2;
9068 switch (BuiltinID) {
9069 case ARM::BI__builtin_arm_mve_vaddq_m_n_f16:
9070 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9071 Param1 = Intrinsic::arm_mve_add_predicated;
9072 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9073 break;
9074 case ARM::BI__builtin_arm_mve_vaddq_m_n_f32:
9075 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9076 Param1 = Intrinsic::arm_mve_add_predicated;
9077 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9078 break;
9079 case ARM::BI__builtin_arm_mve_vaddq_m_n_s16:
9080 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9081 Param1 = Intrinsic::arm_mve_add_predicated;
9082 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9083 break;
9084 case ARM::BI__builtin_arm_mve_vaddq_m_n_s32:
9085 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9086 Param1 = Intrinsic::arm_mve_add_predicated;
9087 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9088 break;
9089 case ARM::BI__builtin_arm_mve_vaddq_m_n_s8:
9090 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9091 Param1 = Intrinsic::arm_mve_add_predicated;
9092 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9093 break;
9094 case ARM::BI__builtin_arm_mve_vaddq_m_n_u16:
9095 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9096 Param1 = Intrinsic::arm_mve_add_predicated;
9097 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9098 break;
9099 case ARM::BI__builtin_arm_mve_vaddq_m_n_u32:
9100 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9101 Param1 = Intrinsic::arm_mve_add_predicated;
9102 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9103 break;
9104 case ARM::BI__builtin_arm_mve_vaddq_m_n_u8:
9105 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9106 Param1 = Intrinsic::arm_mve_add_predicated;
9107 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9108 break;
9109 case ARM::BI__builtin_arm_mve_vmulq_m_n_f16:
9110 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9111 Param1 = Intrinsic::arm_mve_mul_predicated;
9112 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9113 break;
9114 case ARM::BI__builtin_arm_mve_vmulq_m_n_f32:
9115 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9116 Param1 = Intrinsic::arm_mve_mul_predicated;
9117 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9118 break;
9119 case ARM::BI__builtin_arm_mve_vmulq_m_n_s16:
9120 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9121 Param1 = Intrinsic::arm_mve_mul_predicated;
9122 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9123 break;
9124 case ARM::BI__builtin_arm_mve_vmulq_m_n_s32:
9125 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9126 Param1 = Intrinsic::arm_mve_mul_predicated;
9127 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9128 break;
9129 case ARM::BI__builtin_arm_mve_vmulq_m_n_s8:
9130 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9131 Param1 = Intrinsic::arm_mve_mul_predicated;
9132 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9133 break;
9134 case ARM::BI__builtin_arm_mve_vmulq_m_n_u16:
9135 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9136 Param1 = Intrinsic::arm_mve_mul_predicated;
9137 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9138 break;
9139 case ARM::BI__builtin_arm_mve_vmulq_m_n_u32:
9140 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9141 Param1 = Intrinsic::arm_mve_mul_predicated;
9142 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9143 break;
9144 case ARM::BI__builtin_arm_mve_vmulq_m_n_u8:
9145 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9146 Param1 = Intrinsic::arm_mve_mul_predicated;
9147 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9148 break;
9149 case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s16:
9150 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9151 Param1 = Intrinsic::arm_mve_qdmulh_predicated;
9152 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9153 break;
9154 case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s32:
9155 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9156 Param1 = Intrinsic::arm_mve_qdmulh_predicated;
9157 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9158 break;
9159 case ARM::BI__builtin_arm_mve_vqdmulhq_m_n_s8:
9160 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9161 Param1 = Intrinsic::arm_mve_qdmulh_predicated;
9162 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9163 break;
9164 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s16:
9165 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9166 Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
9167 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9168 break;
9169 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s32:
9170 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9171 Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
9172 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9173 break;
9174 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_n_s8:
9175 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9176 Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
9177 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9178 break;
9179 case ARM::BI__builtin_arm_mve_vsubq_m_n_f16:
9180 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9181 Param1 = Intrinsic::arm_mve_sub_predicated;
9182 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9183 break;
9184 case ARM::BI__builtin_arm_mve_vsubq_m_n_f32:
9185 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9186 Param1 = Intrinsic::arm_mve_sub_predicated;
9187 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9188 break;
9189 case ARM::BI__builtin_arm_mve_vsubq_m_n_s16:
9190 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9191 Param1 = Intrinsic::arm_mve_sub_predicated;
9192 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9193 break;
9194 case ARM::BI__builtin_arm_mve_vsubq_m_n_s32:
9195 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9196 Param1 = Intrinsic::arm_mve_sub_predicated;
9197 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9198 break;
9199 case ARM::BI__builtin_arm_mve_vsubq_m_n_s8:
9200 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9201 Param1 = Intrinsic::arm_mve_sub_predicated;
9202 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9203 break;
9204 case ARM::BI__builtin_arm_mve_vsubq_m_n_u16:
9205 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9206 Param1 = Intrinsic::arm_mve_sub_predicated;
9207 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9208 break;
9209 case ARM::BI__builtin_arm_mve_vsubq_m_n_u32:
9210 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9211 Param1 = Intrinsic::arm_mve_sub_predicated;
9212 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9213 break;
9214 case ARM::BI__builtin_arm_mve_vsubq_m_n_u8:
9215 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9216 Param1 = Intrinsic::arm_mve_sub_predicated;
9217 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9218 break;
9219 }
9220 Value *Val0 = EmitScalarExpr(E->getArg(1));
9221 Value *Val1 = EmitScalarExpr(E->getArg(2));
9222 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
9223 Value *Val3 = EmitScalarExpr(E->getArg(3));
9224 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
9225 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val4});
9226 Value *Val6 = EmitScalarExpr(E->getArg(0));
9227 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val2, Val5, Val6});
9228}
9229case ARM::BI__builtin_arm_mve_vhaddq_m_n_s16:
9230case ARM::BI__builtin_arm_mve_vhaddq_m_n_s32:
9231case ARM::BI__builtin_arm_mve_vhaddq_m_n_s8:
9232case ARM::BI__builtin_arm_mve_vhaddq_m_n_u16:
9233case ARM::BI__builtin_arm_mve_vhaddq_m_n_u32:
9234case ARM::BI__builtin_arm_mve_vhaddq_m_n_u8:
9235case ARM::BI__builtin_arm_mve_vhsubq_m_n_s16:
9236case ARM::BI__builtin_arm_mve_vhsubq_m_n_s32:
9237case ARM::BI__builtin_arm_mve_vhsubq_m_n_s8:
9238case ARM::BI__builtin_arm_mve_vhsubq_m_n_u16:
9239case ARM::BI__builtin_arm_mve_vhsubq_m_n_u32:
9240case ARM::BI__builtin_arm_mve_vhsubq_m_n_u8:
9241case ARM::BI__builtin_arm_mve_vqaddq_m_n_s16:
9242case ARM::BI__builtin_arm_mve_vqaddq_m_n_s32:
9243case ARM::BI__builtin_arm_mve_vqaddq_m_n_s8:
9244case ARM::BI__builtin_arm_mve_vqaddq_m_n_u16:
9245case ARM::BI__builtin_arm_mve_vqaddq_m_n_u32:
9246case ARM::BI__builtin_arm_mve_vqaddq_m_n_u8:
9247case ARM::BI__builtin_arm_mve_vqsubq_m_n_s16:
9248case ARM::BI__builtin_arm_mve_vqsubq_m_n_s32:
9249case ARM::BI__builtin_arm_mve_vqsubq_m_n_s8:
9250case ARM::BI__builtin_arm_mve_vqsubq_m_n_u16:
9251case ARM::BI__builtin_arm_mve_vqsubq_m_n_u32:
9252case ARM::BI__builtin_arm_mve_vqsubq_m_n_u8: {
9253 uint32_t Param0;
9254 llvm::Type * Param1;
9255 Intrinsic::ID Param2;
9256 llvm::Type * Param3;
9257 switch (BuiltinID) {
9258 case ARM::BI__builtin_arm_mve_vhaddq_m_n_s16:
9259 Param0 = 0;
9260 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9261 Param2 = Intrinsic::arm_mve_hadd_predicated;
9262 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9263 break;
9264 case ARM::BI__builtin_arm_mve_vhaddq_m_n_s32:
9265 Param0 = 0;
9266 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9267 Param2 = Intrinsic::arm_mve_hadd_predicated;
9268 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9269 break;
9270 case ARM::BI__builtin_arm_mve_vhaddq_m_n_s8:
9271 Param0 = 0;
9272 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9273 Param2 = Intrinsic::arm_mve_hadd_predicated;
9274 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9275 break;
9276 case ARM::BI__builtin_arm_mve_vhaddq_m_n_u16:
9277 Param0 = 1;
9278 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9279 Param2 = Intrinsic::arm_mve_hadd_predicated;
9280 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9281 break;
9282 case ARM::BI__builtin_arm_mve_vhaddq_m_n_u32:
9283 Param0 = 1;
9284 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9285 Param2 = Intrinsic::arm_mve_hadd_predicated;
9286 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9287 break;
9288 case ARM::BI__builtin_arm_mve_vhaddq_m_n_u8:
9289 Param0 = 1;
9290 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9291 Param2 = Intrinsic::arm_mve_hadd_predicated;
9292 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9293 break;
9294 case ARM::BI__builtin_arm_mve_vhsubq_m_n_s16:
9295 Param0 = 0;
9296 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9297 Param2 = Intrinsic::arm_mve_hsub_predicated;
9298 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9299 break;
9300 case ARM::BI__builtin_arm_mve_vhsubq_m_n_s32:
9301 Param0 = 0;
9302 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9303 Param2 = Intrinsic::arm_mve_hsub_predicated;
9304 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9305 break;
9306 case ARM::BI__builtin_arm_mve_vhsubq_m_n_s8:
9307 Param0 = 0;
9308 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9309 Param2 = Intrinsic::arm_mve_hsub_predicated;
9310 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9311 break;
9312 case ARM::BI__builtin_arm_mve_vhsubq_m_n_u16:
9313 Param0 = 1;
9314 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9315 Param2 = Intrinsic::arm_mve_hsub_predicated;
9316 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9317 break;
9318 case ARM::BI__builtin_arm_mve_vhsubq_m_n_u32:
9319 Param0 = 1;
9320 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9321 Param2 = Intrinsic::arm_mve_hsub_predicated;
9322 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9323 break;
9324 case ARM::BI__builtin_arm_mve_vhsubq_m_n_u8:
9325 Param0 = 1;
9326 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9327 Param2 = Intrinsic::arm_mve_hsub_predicated;
9328 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9329 break;
9330 case ARM::BI__builtin_arm_mve_vqaddq_m_n_s16:
9331 Param0 = 0;
9332 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9333 Param2 = Intrinsic::arm_mve_qadd_predicated;
9334 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9335 break;
9336 case ARM::BI__builtin_arm_mve_vqaddq_m_n_s32:
9337 Param0 = 0;
9338 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9339 Param2 = Intrinsic::arm_mve_qadd_predicated;
9340 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9341 break;
9342 case ARM::BI__builtin_arm_mve_vqaddq_m_n_s8:
9343 Param0 = 0;
9344 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9345 Param2 = Intrinsic::arm_mve_qadd_predicated;
9346 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9347 break;
9348 case ARM::BI__builtin_arm_mve_vqaddq_m_n_u16:
9349 Param0 = 1;
9350 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9351 Param2 = Intrinsic::arm_mve_qadd_predicated;
9352 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9353 break;
9354 case ARM::BI__builtin_arm_mve_vqaddq_m_n_u32:
9355 Param0 = 1;
9356 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9357 Param2 = Intrinsic::arm_mve_qadd_predicated;
9358 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9359 break;
9360 case ARM::BI__builtin_arm_mve_vqaddq_m_n_u8:
9361 Param0 = 1;
9362 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9363 Param2 = Intrinsic::arm_mve_qadd_predicated;
9364 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9365 break;
9366 case ARM::BI__builtin_arm_mve_vqsubq_m_n_s16:
9367 Param0 = 0;
9368 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9369 Param2 = Intrinsic::arm_mve_qsub_predicated;
9370 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9371 break;
9372 case ARM::BI__builtin_arm_mve_vqsubq_m_n_s32:
9373 Param0 = 0;
9374 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9375 Param2 = Intrinsic::arm_mve_qsub_predicated;
9376 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9377 break;
9378 case ARM::BI__builtin_arm_mve_vqsubq_m_n_s8:
9379 Param0 = 0;
9380 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9381 Param2 = Intrinsic::arm_mve_qsub_predicated;
9382 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9383 break;
9384 case ARM::BI__builtin_arm_mve_vqsubq_m_n_u16:
9385 Param0 = 1;
9386 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9387 Param2 = Intrinsic::arm_mve_qsub_predicated;
9388 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
9389 break;
9390 case ARM::BI__builtin_arm_mve_vqsubq_m_n_u32:
9391 Param0 = 1;
9392 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9393 Param2 = Intrinsic::arm_mve_qsub_predicated;
9394 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
9395 break;
9396 case ARM::BI__builtin_arm_mve_vqsubq_m_n_u8:
9397 Param0 = 1;
9398 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9399 Param2 = Intrinsic::arm_mve_qsub_predicated;
9400 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
9401 break;
9402 }
9403 Value *Val0 = EmitScalarExpr(E->getArg(1));
9404 Value *Val1 = EmitScalarExpr(E->getArg(2));
9405 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
9406 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
9407 Value *Val4 = EmitScalarExpr(E->getArg(3));
9408 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
9409 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
9410 Value *Val7 = EmitScalarExpr(E->getArg(0));
9411 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val2, Val3, Val6, Val7});
9412}
9413case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
9414case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
9415case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
9416case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32: {
9417 uint32_t Param0;
9418 llvm::Type * Param1;
9419 llvm::Type * Param2;
9420 switch (BuiltinID) {
9421 case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s16:
9422 Param0 = 0;
9423 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
9424 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9425 break;
9426 case ARM::BI__builtin_arm_mve_vqdmullbq_m_n_s32:
9427 Param0 = 0;
9428 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
9429 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9430 break;
9431 case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s16:
9432 Param0 = 1;
9433 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
9434 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9435 break;
9436 case ARM::BI__builtin_arm_mve_vqdmulltq_m_n_s32:
9437 Param0 = 1;
9438 Param1 = llvm::FixedVectorType::get(Int64Ty, 2);
9439 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9440 break;
9441 }
9442 Value *Val0 = EmitScalarExpr(E->getArg(1));
9443 Value *Val1 = EmitScalarExpr(E->getArg(2));
9444 Value *Val2 = ARMMVEVectorSplat(Builder, Val1);
9445 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
9446 Value *Val4 = EmitScalarExpr(E->getArg(3));
9447 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
9448 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
9449 Value *Val7 = EmitScalarExpr(E->getArg(0));
9450 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vqdmull_predicated, {Param1, Param2, llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val0, Val2, Val3, Val6, Val7});
9451}
9452case ARM::BI__builtin_arm_mve_vfmsq_m_f16:
9453case ARM::BI__builtin_arm_mve_vfmsq_m_f32: {
9454 llvm::Type * Param0;
9455 llvm::Type * Param1;
9456 switch (BuiltinID) {
9457 case ARM::BI__builtin_arm_mve_vfmsq_m_f16:
9458 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9459 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
9460 break;
9461 case ARM::BI__builtin_arm_mve_vfmsq_m_f32:
9462 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9463 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
9464 break;
9465 }
9466 Value *Val0 = EmitScalarExpr(E->getArg(1));
9467 Value *Val1 = EmitScalarExpr(E->getArg(2));
9468 Value *Val2 = Builder.CreateFNeg(Val1);
9469 Value *Val3 = EmitScalarExpr(E->getArg(0));
9470 Value *Val4 = EmitScalarExpr(E->getArg(3));
9471 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
9472 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val5});
9473 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val0, Val2, Val3, Val6});
9474}
9475case ARM::BI__builtin_arm_mve_vfmsq_f16:
9476case ARM::BI__builtin_arm_mve_vfmsq_f32: {
9477 llvm::Type * Param0;
9478 switch (BuiltinID) {
9479 case ARM::BI__builtin_arm_mve_vfmsq_f16:
9480 Param0 = llvm::FixedVectorType::get(HalfTy, 8);
9481 break;
9482 case ARM::BI__builtin_arm_mve_vfmsq_f32:
9483 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
9484 break;
9485 }
9486 Value *Val0 = EmitScalarExpr(E->getArg(1));
9487 Value *Val1 = EmitScalarExpr(E->getArg(2));
9488 Value *Val2 = Builder.CreateFNeg(Val1);
9489 Value *Val3 = EmitScalarExpr(E->getArg(0));
9490 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val0, Val2, Val3});
9491}
9492case ARM::BI__builtin_arm_mve_vabsq_m_f16:
9493case ARM::BI__builtin_arm_mve_vabsq_m_f32:
9494case ARM::BI__builtin_arm_mve_vabsq_m_s16:
9495case ARM::BI__builtin_arm_mve_vabsq_m_s32:
9496case ARM::BI__builtin_arm_mve_vabsq_m_s8:
9497case ARM::BI__builtin_arm_mve_vclsq_m_s16:
9498case ARM::BI__builtin_arm_mve_vclsq_m_s32:
9499case ARM::BI__builtin_arm_mve_vclsq_m_s8:
9500case ARM::BI__builtin_arm_mve_vclzq_m_s16:
9501case ARM::BI__builtin_arm_mve_vclzq_m_s32:
9502case ARM::BI__builtin_arm_mve_vclzq_m_s8:
9503case ARM::BI__builtin_arm_mve_vclzq_m_u16:
9504case ARM::BI__builtin_arm_mve_vclzq_m_u32:
9505case ARM::BI__builtin_arm_mve_vclzq_m_u8:
9506case ARM::BI__builtin_arm_mve_vmvnq_m_s16:
9507case ARM::BI__builtin_arm_mve_vmvnq_m_s32:
9508case ARM::BI__builtin_arm_mve_vmvnq_m_s8:
9509case ARM::BI__builtin_arm_mve_vmvnq_m_u16:
9510case ARM::BI__builtin_arm_mve_vmvnq_m_u32:
9511case ARM::BI__builtin_arm_mve_vmvnq_m_u8:
9512case ARM::BI__builtin_arm_mve_vnegq_m_f16:
9513case ARM::BI__builtin_arm_mve_vnegq_m_f32:
9514case ARM::BI__builtin_arm_mve_vnegq_m_s16:
9515case ARM::BI__builtin_arm_mve_vnegq_m_s32:
9516case ARM::BI__builtin_arm_mve_vnegq_m_s8:
9517case ARM::BI__builtin_arm_mve_vqabsq_m_s16:
9518case ARM::BI__builtin_arm_mve_vqabsq_m_s32:
9519case ARM::BI__builtin_arm_mve_vqabsq_m_s8:
9520case ARM::BI__builtin_arm_mve_vqnegq_m_s16:
9521case ARM::BI__builtin_arm_mve_vqnegq_m_s32:
9522case ARM::BI__builtin_arm_mve_vqnegq_m_s8:
9523case ARM::BI__builtin_arm_mve_vrndaq_m_f16:
9524case ARM::BI__builtin_arm_mve_vrndaq_m_f32:
9525case ARM::BI__builtin_arm_mve_vrndmq_m_f16:
9526case ARM::BI__builtin_arm_mve_vrndmq_m_f32:
9527case ARM::BI__builtin_arm_mve_vrndnq_m_f16:
9528case ARM::BI__builtin_arm_mve_vrndnq_m_f32:
9529case ARM::BI__builtin_arm_mve_vrndpq_m_f16:
9530case ARM::BI__builtin_arm_mve_vrndpq_m_f32:
9531case ARM::BI__builtin_arm_mve_vrndq_m_f16:
9532case ARM::BI__builtin_arm_mve_vrndq_m_f32:
9533case ARM::BI__builtin_arm_mve_vrndxq_m_f16:
9534case ARM::BI__builtin_arm_mve_vrndxq_m_f32: {
9535 llvm::Type * Param0;
9536 Intrinsic::ID Param1;
9537 llvm::Type * Param2;
9538 switch (BuiltinID) {
9539 case ARM::BI__builtin_arm_mve_vabsq_m_f16:
9540 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9541 Param1 = Intrinsic::arm_mve_abs_predicated;
9542 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9543 break;
9544 case ARM::BI__builtin_arm_mve_vabsq_m_f32:
9545 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9546 Param1 = Intrinsic::arm_mve_abs_predicated;
9547 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9548 break;
9549 case ARM::BI__builtin_arm_mve_vabsq_m_s16:
9550 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9551 Param1 = Intrinsic::arm_mve_abs_predicated;
9552 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9553 break;
9554 case ARM::BI__builtin_arm_mve_vabsq_m_s32:
9555 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9556 Param1 = Intrinsic::arm_mve_abs_predicated;
9557 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9558 break;
9559 case ARM::BI__builtin_arm_mve_vabsq_m_s8:
9560 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9561 Param1 = Intrinsic::arm_mve_abs_predicated;
9562 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9563 break;
9564 case ARM::BI__builtin_arm_mve_vclsq_m_s16:
9565 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9566 Param1 = Intrinsic::arm_mve_cls_predicated;
9567 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9568 break;
9569 case ARM::BI__builtin_arm_mve_vclsq_m_s32:
9570 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9571 Param1 = Intrinsic::arm_mve_cls_predicated;
9572 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9573 break;
9574 case ARM::BI__builtin_arm_mve_vclsq_m_s8:
9575 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9576 Param1 = Intrinsic::arm_mve_cls_predicated;
9577 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9578 break;
9579 case ARM::BI__builtin_arm_mve_vclzq_m_s16:
9580 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9581 Param1 = Intrinsic::arm_mve_clz_predicated;
9582 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9583 break;
9584 case ARM::BI__builtin_arm_mve_vclzq_m_s32:
9585 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9586 Param1 = Intrinsic::arm_mve_clz_predicated;
9587 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9588 break;
9589 case ARM::BI__builtin_arm_mve_vclzq_m_s8:
9590 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9591 Param1 = Intrinsic::arm_mve_clz_predicated;
9592 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9593 break;
9594 case ARM::BI__builtin_arm_mve_vclzq_m_u16:
9595 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9596 Param1 = Intrinsic::arm_mve_clz_predicated;
9597 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9598 break;
9599 case ARM::BI__builtin_arm_mve_vclzq_m_u32:
9600 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9601 Param1 = Intrinsic::arm_mve_clz_predicated;
9602 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9603 break;
9604 case ARM::BI__builtin_arm_mve_vclzq_m_u8:
9605 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9606 Param1 = Intrinsic::arm_mve_clz_predicated;
9607 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9608 break;
9609 case ARM::BI__builtin_arm_mve_vmvnq_m_s16:
9610 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9611 Param1 = Intrinsic::arm_mve_mvn_predicated;
9612 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9613 break;
9614 case ARM::BI__builtin_arm_mve_vmvnq_m_s32:
9615 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9616 Param1 = Intrinsic::arm_mve_mvn_predicated;
9617 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9618 break;
9619 case ARM::BI__builtin_arm_mve_vmvnq_m_s8:
9620 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9621 Param1 = Intrinsic::arm_mve_mvn_predicated;
9622 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9623 break;
9624 case ARM::BI__builtin_arm_mve_vmvnq_m_u16:
9625 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9626 Param1 = Intrinsic::arm_mve_mvn_predicated;
9627 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9628 break;
9629 case ARM::BI__builtin_arm_mve_vmvnq_m_u32:
9630 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9631 Param1 = Intrinsic::arm_mve_mvn_predicated;
9632 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9633 break;
9634 case ARM::BI__builtin_arm_mve_vmvnq_m_u8:
9635 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9636 Param1 = Intrinsic::arm_mve_mvn_predicated;
9637 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9638 break;
9639 case ARM::BI__builtin_arm_mve_vnegq_m_f16:
9640 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9641 Param1 = Intrinsic::arm_mve_neg_predicated;
9642 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9643 break;
9644 case ARM::BI__builtin_arm_mve_vnegq_m_f32:
9645 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9646 Param1 = Intrinsic::arm_mve_neg_predicated;
9647 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9648 break;
9649 case ARM::BI__builtin_arm_mve_vnegq_m_s16:
9650 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9651 Param1 = Intrinsic::arm_mve_neg_predicated;
9652 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9653 break;
9654 case ARM::BI__builtin_arm_mve_vnegq_m_s32:
9655 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9656 Param1 = Intrinsic::arm_mve_neg_predicated;
9657 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9658 break;
9659 case ARM::BI__builtin_arm_mve_vnegq_m_s8:
9660 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9661 Param1 = Intrinsic::arm_mve_neg_predicated;
9662 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9663 break;
9664 case ARM::BI__builtin_arm_mve_vqabsq_m_s16:
9665 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9666 Param1 = Intrinsic::arm_mve_qabs_predicated;
9667 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9668 break;
9669 case ARM::BI__builtin_arm_mve_vqabsq_m_s32:
9670 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9671 Param1 = Intrinsic::arm_mve_qabs_predicated;
9672 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9673 break;
9674 case ARM::BI__builtin_arm_mve_vqabsq_m_s8:
9675 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9676 Param1 = Intrinsic::arm_mve_qabs_predicated;
9677 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9678 break;
9679 case ARM::BI__builtin_arm_mve_vqnegq_m_s16:
9680 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9681 Param1 = Intrinsic::arm_mve_qneg_predicated;
9682 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9683 break;
9684 case ARM::BI__builtin_arm_mve_vqnegq_m_s32:
9685 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9686 Param1 = Intrinsic::arm_mve_qneg_predicated;
9687 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9688 break;
9689 case ARM::BI__builtin_arm_mve_vqnegq_m_s8:
9690 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9691 Param1 = Intrinsic::arm_mve_qneg_predicated;
9692 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9693 break;
9694 case ARM::BI__builtin_arm_mve_vrndaq_m_f16:
9695 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9696 Param1 = Intrinsic::arm_mve_vrinta_predicated;
9697 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9698 break;
9699 case ARM::BI__builtin_arm_mve_vrndaq_m_f32:
9700 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9701 Param1 = Intrinsic::arm_mve_vrinta_predicated;
9702 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9703 break;
9704 case ARM::BI__builtin_arm_mve_vrndmq_m_f16:
9705 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9706 Param1 = Intrinsic::arm_mve_vrintm_predicated;
9707 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9708 break;
9709 case ARM::BI__builtin_arm_mve_vrndmq_m_f32:
9710 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9711 Param1 = Intrinsic::arm_mve_vrintm_predicated;
9712 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9713 break;
9714 case ARM::BI__builtin_arm_mve_vrndnq_m_f16:
9715 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9716 Param1 = Intrinsic::arm_mve_vrintn_predicated;
9717 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9718 break;
9719 case ARM::BI__builtin_arm_mve_vrndnq_m_f32:
9720 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9721 Param1 = Intrinsic::arm_mve_vrintn_predicated;
9722 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9723 break;
9724 case ARM::BI__builtin_arm_mve_vrndpq_m_f16:
9725 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9726 Param1 = Intrinsic::arm_mve_vrintp_predicated;
9727 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9728 break;
9729 case ARM::BI__builtin_arm_mve_vrndpq_m_f32:
9730 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9731 Param1 = Intrinsic::arm_mve_vrintp_predicated;
9732 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9733 break;
9734 case ARM::BI__builtin_arm_mve_vrndq_m_f16:
9735 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9736 Param1 = Intrinsic::arm_mve_vrintz_predicated;
9737 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9738 break;
9739 case ARM::BI__builtin_arm_mve_vrndq_m_f32:
9740 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9741 Param1 = Intrinsic::arm_mve_vrintz_predicated;
9742 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9743 break;
9744 case ARM::BI__builtin_arm_mve_vrndxq_m_f16:
9745 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9746 Param1 = Intrinsic::arm_mve_vrintx_predicated;
9747 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9748 break;
9749 case ARM::BI__builtin_arm_mve_vrndxq_m_f32:
9750 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9751 Param1 = Intrinsic::arm_mve_vrintx_predicated;
9752 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9753 break;
9754 }
9755 Value *Val0 = EmitScalarExpr(E->getArg(1));
9756 Value *Val1 = EmitScalarExpr(E->getArg(2));
9757 Value *Val2 = Builder.CreateIntCast(Val1, Int32Ty, false);
9758 Value *Val3 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val2});
9759 Value *Val4 = EmitScalarExpr(E->getArg(0));
9760 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val3, Val4});
9761}
9762case ARM::BI__builtin_arm_mve_vaddq_m_f16:
9763case ARM::BI__builtin_arm_mve_vaddq_m_f32:
9764case ARM::BI__builtin_arm_mve_vaddq_m_s16:
9765case ARM::BI__builtin_arm_mve_vaddq_m_s32:
9766case ARM::BI__builtin_arm_mve_vaddq_m_s8:
9767case ARM::BI__builtin_arm_mve_vaddq_m_u16:
9768case ARM::BI__builtin_arm_mve_vaddq_m_u32:
9769case ARM::BI__builtin_arm_mve_vaddq_m_u8:
9770case ARM::BI__builtin_arm_mve_vmulq_m_f16:
9771case ARM::BI__builtin_arm_mve_vmulq_m_f32:
9772case ARM::BI__builtin_arm_mve_vmulq_m_s16:
9773case ARM::BI__builtin_arm_mve_vmulq_m_s32:
9774case ARM::BI__builtin_arm_mve_vmulq_m_s8:
9775case ARM::BI__builtin_arm_mve_vmulq_m_u16:
9776case ARM::BI__builtin_arm_mve_vmulq_m_u32:
9777case ARM::BI__builtin_arm_mve_vmulq_m_u8:
9778case ARM::BI__builtin_arm_mve_vqdmulhq_m_s16:
9779case ARM::BI__builtin_arm_mve_vqdmulhq_m_s32:
9780case ARM::BI__builtin_arm_mve_vqdmulhq_m_s8:
9781case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s16:
9782case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s32:
9783case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s8:
9784case ARM::BI__builtin_arm_mve_vqshluq_m_n_s16:
9785case ARM::BI__builtin_arm_mve_vqshluq_m_n_s32:
9786case ARM::BI__builtin_arm_mve_vqshluq_m_n_s8:
9787case ARM::BI__builtin_arm_mve_vshlq_m_n_s16:
9788case ARM::BI__builtin_arm_mve_vshlq_m_n_s32:
9789case ARM::BI__builtin_arm_mve_vshlq_m_n_s8:
9790case ARM::BI__builtin_arm_mve_vshlq_m_n_u16:
9791case ARM::BI__builtin_arm_mve_vshlq_m_n_u32:
9792case ARM::BI__builtin_arm_mve_vshlq_m_n_u8:
9793case ARM::BI__builtin_arm_mve_vsubq_m_f16:
9794case ARM::BI__builtin_arm_mve_vsubq_m_f32:
9795case ARM::BI__builtin_arm_mve_vsubq_m_s16:
9796case ARM::BI__builtin_arm_mve_vsubq_m_s32:
9797case ARM::BI__builtin_arm_mve_vsubq_m_s8:
9798case ARM::BI__builtin_arm_mve_vsubq_m_u16:
9799case ARM::BI__builtin_arm_mve_vsubq_m_u32:
9800case ARM::BI__builtin_arm_mve_vsubq_m_u8: {
9801 llvm::Type * Param0;
9802 Intrinsic::ID Param1;
9803 llvm::Type * Param2;
9804 switch (BuiltinID) {
9805 case ARM::BI__builtin_arm_mve_vaddq_m_f16:
9806 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9807 Param1 = Intrinsic::arm_mve_add_predicated;
9808 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9809 break;
9810 case ARM::BI__builtin_arm_mve_vaddq_m_f32:
9811 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9812 Param1 = Intrinsic::arm_mve_add_predicated;
9813 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9814 break;
9815 case ARM::BI__builtin_arm_mve_vaddq_m_s16:
9816 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9817 Param1 = Intrinsic::arm_mve_add_predicated;
9818 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9819 break;
9820 case ARM::BI__builtin_arm_mve_vaddq_m_s32:
9821 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9822 Param1 = Intrinsic::arm_mve_add_predicated;
9823 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9824 break;
9825 case ARM::BI__builtin_arm_mve_vaddq_m_s8:
9826 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9827 Param1 = Intrinsic::arm_mve_add_predicated;
9828 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9829 break;
9830 case ARM::BI__builtin_arm_mve_vaddq_m_u16:
9831 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9832 Param1 = Intrinsic::arm_mve_add_predicated;
9833 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9834 break;
9835 case ARM::BI__builtin_arm_mve_vaddq_m_u32:
9836 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9837 Param1 = Intrinsic::arm_mve_add_predicated;
9838 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9839 break;
9840 case ARM::BI__builtin_arm_mve_vaddq_m_u8:
9841 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9842 Param1 = Intrinsic::arm_mve_add_predicated;
9843 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9844 break;
9845 case ARM::BI__builtin_arm_mve_vmulq_m_f16:
9846 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9847 Param1 = Intrinsic::arm_mve_mul_predicated;
9848 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9849 break;
9850 case ARM::BI__builtin_arm_mve_vmulq_m_f32:
9851 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9852 Param1 = Intrinsic::arm_mve_mul_predicated;
9853 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9854 break;
9855 case ARM::BI__builtin_arm_mve_vmulq_m_s16:
9856 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9857 Param1 = Intrinsic::arm_mve_mul_predicated;
9858 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9859 break;
9860 case ARM::BI__builtin_arm_mve_vmulq_m_s32:
9861 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9862 Param1 = Intrinsic::arm_mve_mul_predicated;
9863 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9864 break;
9865 case ARM::BI__builtin_arm_mve_vmulq_m_s8:
9866 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9867 Param1 = Intrinsic::arm_mve_mul_predicated;
9868 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9869 break;
9870 case ARM::BI__builtin_arm_mve_vmulq_m_u16:
9871 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9872 Param1 = Intrinsic::arm_mve_mul_predicated;
9873 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9874 break;
9875 case ARM::BI__builtin_arm_mve_vmulq_m_u32:
9876 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9877 Param1 = Intrinsic::arm_mve_mul_predicated;
9878 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9879 break;
9880 case ARM::BI__builtin_arm_mve_vmulq_m_u8:
9881 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9882 Param1 = Intrinsic::arm_mve_mul_predicated;
9883 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9884 break;
9885 case ARM::BI__builtin_arm_mve_vqdmulhq_m_s16:
9886 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9887 Param1 = Intrinsic::arm_mve_qdmulh_predicated;
9888 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9889 break;
9890 case ARM::BI__builtin_arm_mve_vqdmulhq_m_s32:
9891 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9892 Param1 = Intrinsic::arm_mve_qdmulh_predicated;
9893 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9894 break;
9895 case ARM::BI__builtin_arm_mve_vqdmulhq_m_s8:
9896 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9897 Param1 = Intrinsic::arm_mve_qdmulh_predicated;
9898 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9899 break;
9900 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s16:
9901 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9902 Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
9903 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9904 break;
9905 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s32:
9906 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9907 Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
9908 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9909 break;
9910 case ARM::BI__builtin_arm_mve_vqrdmulhq_m_s8:
9911 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9912 Param1 = Intrinsic::arm_mve_qrdmulh_predicated;
9913 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9914 break;
9915 case ARM::BI__builtin_arm_mve_vqshluq_m_n_s16:
9916 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9917 Param1 = Intrinsic::arm_mve_vqshlu_imm_predicated;
9918 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9919 break;
9920 case ARM::BI__builtin_arm_mve_vqshluq_m_n_s32:
9921 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9922 Param1 = Intrinsic::arm_mve_vqshlu_imm_predicated;
9923 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9924 break;
9925 case ARM::BI__builtin_arm_mve_vqshluq_m_n_s8:
9926 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9927 Param1 = Intrinsic::arm_mve_vqshlu_imm_predicated;
9928 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9929 break;
9930 case ARM::BI__builtin_arm_mve_vshlq_m_n_s16:
9931 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9932 Param1 = Intrinsic::arm_mve_shl_imm_predicated;
9933 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9934 break;
9935 case ARM::BI__builtin_arm_mve_vshlq_m_n_s32:
9936 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9937 Param1 = Intrinsic::arm_mve_shl_imm_predicated;
9938 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9939 break;
9940 case ARM::BI__builtin_arm_mve_vshlq_m_n_s8:
9941 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9942 Param1 = Intrinsic::arm_mve_shl_imm_predicated;
9943 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9944 break;
9945 case ARM::BI__builtin_arm_mve_vshlq_m_n_u16:
9946 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9947 Param1 = Intrinsic::arm_mve_shl_imm_predicated;
9948 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9949 break;
9950 case ARM::BI__builtin_arm_mve_vshlq_m_n_u32:
9951 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9952 Param1 = Intrinsic::arm_mve_shl_imm_predicated;
9953 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9954 break;
9955 case ARM::BI__builtin_arm_mve_vshlq_m_n_u8:
9956 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9957 Param1 = Intrinsic::arm_mve_shl_imm_predicated;
9958 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9959 break;
9960 case ARM::BI__builtin_arm_mve_vsubq_m_f16:
9961 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9962 Param1 = Intrinsic::arm_mve_sub_predicated;
9963 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
9964 break;
9965 case ARM::BI__builtin_arm_mve_vsubq_m_f32:
9966 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9967 Param1 = Intrinsic::arm_mve_sub_predicated;
9968 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
9969 break;
9970 case ARM::BI__builtin_arm_mve_vsubq_m_s16:
9971 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9972 Param1 = Intrinsic::arm_mve_sub_predicated;
9973 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9974 break;
9975 case ARM::BI__builtin_arm_mve_vsubq_m_s32:
9976 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9977 Param1 = Intrinsic::arm_mve_sub_predicated;
9978 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9979 break;
9980 case ARM::BI__builtin_arm_mve_vsubq_m_s8:
9981 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9982 Param1 = Intrinsic::arm_mve_sub_predicated;
9983 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9984 break;
9985 case ARM::BI__builtin_arm_mve_vsubq_m_u16:
9986 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
9987 Param1 = Intrinsic::arm_mve_sub_predicated;
9988 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
9989 break;
9990 case ARM::BI__builtin_arm_mve_vsubq_m_u32:
9991 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
9992 Param1 = Intrinsic::arm_mve_sub_predicated;
9993 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
9994 break;
9995 case ARM::BI__builtin_arm_mve_vsubq_m_u8:
9996 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
9997 Param1 = Intrinsic::arm_mve_sub_predicated;
9998 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
9999 break;
10000 }
10001 Value *Val0 = EmitScalarExpr(E->getArg(1));
10002 Value *Val1 = EmitScalarExpr(E->getArg(2));
10003 Value *Val2 = EmitScalarExpr(E->getArg(3));
10004 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
10005 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val3});
10006 Value *Val5 = EmitScalarExpr(E->getArg(0));
10007 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param0}), {Val0, Val1, Val4, Val5});
10008}
10009case ARM::BI__builtin_arm_mve_vabdq_m_f16:
10010case ARM::BI__builtin_arm_mve_vabdq_m_f32:
10011case ARM::BI__builtin_arm_mve_vabdq_m_s16:
10012case ARM::BI__builtin_arm_mve_vabdq_m_s32:
10013case ARM::BI__builtin_arm_mve_vabdq_m_s8:
10014case ARM::BI__builtin_arm_mve_vabdq_m_u16:
10015case ARM::BI__builtin_arm_mve_vabdq_m_u32:
10016case ARM::BI__builtin_arm_mve_vabdq_m_u8:
10017case ARM::BI__builtin_arm_mve_vhaddq_m_s16:
10018case ARM::BI__builtin_arm_mve_vhaddq_m_s32:
10019case ARM::BI__builtin_arm_mve_vhaddq_m_s8:
10020case ARM::BI__builtin_arm_mve_vhaddq_m_u16:
10021case ARM::BI__builtin_arm_mve_vhaddq_m_u32:
10022case ARM::BI__builtin_arm_mve_vhaddq_m_u8:
10023case ARM::BI__builtin_arm_mve_vhsubq_m_s16:
10024case ARM::BI__builtin_arm_mve_vhsubq_m_s32:
10025case ARM::BI__builtin_arm_mve_vhsubq_m_s8:
10026case ARM::BI__builtin_arm_mve_vhsubq_m_u16:
10027case ARM::BI__builtin_arm_mve_vhsubq_m_u32:
10028case ARM::BI__builtin_arm_mve_vhsubq_m_u8:
10029case ARM::BI__builtin_arm_mve_vmaxnmq_m_f16:
10030case ARM::BI__builtin_arm_mve_vmaxnmq_m_f32:
10031case ARM::BI__builtin_arm_mve_vmaxq_m_s16:
10032case ARM::BI__builtin_arm_mve_vmaxq_m_s32:
10033case ARM::BI__builtin_arm_mve_vmaxq_m_s8:
10034case ARM::BI__builtin_arm_mve_vmaxq_m_u16:
10035case ARM::BI__builtin_arm_mve_vmaxq_m_u32:
10036case ARM::BI__builtin_arm_mve_vmaxq_m_u8:
10037case ARM::BI__builtin_arm_mve_vminnmq_m_f16:
10038case ARM::BI__builtin_arm_mve_vminnmq_m_f32:
10039case ARM::BI__builtin_arm_mve_vminq_m_s16:
10040case ARM::BI__builtin_arm_mve_vminq_m_s32:
10041case ARM::BI__builtin_arm_mve_vminq_m_s8:
10042case ARM::BI__builtin_arm_mve_vminq_m_u16:
10043case ARM::BI__builtin_arm_mve_vminq_m_u32:
10044case ARM::BI__builtin_arm_mve_vminq_m_u8:
10045case ARM::BI__builtin_arm_mve_vmulhq_m_s16:
10046case ARM::BI__builtin_arm_mve_vmulhq_m_s32:
10047case ARM::BI__builtin_arm_mve_vmulhq_m_s8:
10048case ARM::BI__builtin_arm_mve_vmulhq_m_u16:
10049case ARM::BI__builtin_arm_mve_vmulhq_m_u32:
10050case ARM::BI__builtin_arm_mve_vmulhq_m_u8:
10051case ARM::BI__builtin_arm_mve_vqaddq_m_s16:
10052case ARM::BI__builtin_arm_mve_vqaddq_m_s32:
10053case ARM::BI__builtin_arm_mve_vqaddq_m_s8:
10054case ARM::BI__builtin_arm_mve_vqaddq_m_u16:
10055case ARM::BI__builtin_arm_mve_vqaddq_m_u32:
10056case ARM::BI__builtin_arm_mve_vqaddq_m_u8:
10057case ARM::BI__builtin_arm_mve_vqshlq_m_n_s16:
10058case ARM::BI__builtin_arm_mve_vqshlq_m_n_s32:
10059case ARM::BI__builtin_arm_mve_vqshlq_m_n_s8:
10060case ARM::BI__builtin_arm_mve_vqshlq_m_n_u16:
10061case ARM::BI__builtin_arm_mve_vqshlq_m_n_u32:
10062case ARM::BI__builtin_arm_mve_vqshlq_m_n_u8:
10063case ARM::BI__builtin_arm_mve_vqsubq_m_s16:
10064case ARM::BI__builtin_arm_mve_vqsubq_m_s32:
10065case ARM::BI__builtin_arm_mve_vqsubq_m_s8:
10066case ARM::BI__builtin_arm_mve_vqsubq_m_u16:
10067case ARM::BI__builtin_arm_mve_vqsubq_m_u32:
10068case ARM::BI__builtin_arm_mve_vqsubq_m_u8:
10069case ARM::BI__builtin_arm_mve_vrhaddq_m_s16:
10070case ARM::BI__builtin_arm_mve_vrhaddq_m_s32:
10071case ARM::BI__builtin_arm_mve_vrhaddq_m_s8:
10072case ARM::BI__builtin_arm_mve_vrhaddq_m_u16:
10073case ARM::BI__builtin_arm_mve_vrhaddq_m_u32:
10074case ARM::BI__builtin_arm_mve_vrhaddq_m_u8:
10075case ARM::BI__builtin_arm_mve_vrmulhq_m_s16:
10076case ARM::BI__builtin_arm_mve_vrmulhq_m_s32:
10077case ARM::BI__builtin_arm_mve_vrmulhq_m_s8:
10078case ARM::BI__builtin_arm_mve_vrmulhq_m_u16:
10079case ARM::BI__builtin_arm_mve_vrmulhq_m_u32:
10080case ARM::BI__builtin_arm_mve_vrmulhq_m_u8:
10081case ARM::BI__builtin_arm_mve_vrshrq_m_n_s16:
10082case ARM::BI__builtin_arm_mve_vrshrq_m_n_s32:
10083case ARM::BI__builtin_arm_mve_vrshrq_m_n_s8:
10084case ARM::BI__builtin_arm_mve_vrshrq_m_n_u16:
10085case ARM::BI__builtin_arm_mve_vrshrq_m_n_u32:
10086case ARM::BI__builtin_arm_mve_vrshrq_m_n_u8:
10087case ARM::BI__builtin_arm_mve_vshrq_m_n_s16:
10088case ARM::BI__builtin_arm_mve_vshrq_m_n_s32:
10089case ARM::BI__builtin_arm_mve_vshrq_m_n_s8:
10090case ARM::BI__builtin_arm_mve_vshrq_m_n_u16:
10091case ARM::BI__builtin_arm_mve_vshrq_m_n_u32:
10092case ARM::BI__builtin_arm_mve_vshrq_m_n_u8: {
10093 uint32_t Param0;
10094 llvm::Type * Param1;
10095 Intrinsic::ID Param2;
10096 llvm::Type * Param3;
10097 switch (BuiltinID) {
10098 case ARM::BI__builtin_arm_mve_vabdq_m_f16:
10099 Param0 = 0;
10100 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10101 Param2 = Intrinsic::arm_mve_abd_predicated;
10102 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
10103 break;
10104 case ARM::BI__builtin_arm_mve_vabdq_m_f32:
10105 Param0 = 0;
10106 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10107 Param2 = Intrinsic::arm_mve_abd_predicated;
10108 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
10109 break;
10110 case ARM::BI__builtin_arm_mve_vabdq_m_s16:
10111 Param0 = 0;
10112 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10113 Param2 = Intrinsic::arm_mve_abd_predicated;
10114 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10115 break;
10116 case ARM::BI__builtin_arm_mve_vabdq_m_s32:
10117 Param0 = 0;
10118 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10119 Param2 = Intrinsic::arm_mve_abd_predicated;
10120 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10121 break;
10122 case ARM::BI__builtin_arm_mve_vabdq_m_s8:
10123 Param0 = 0;
10124 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10125 Param2 = Intrinsic::arm_mve_abd_predicated;
10126 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10127 break;
10128 case ARM::BI__builtin_arm_mve_vabdq_m_u16:
10129 Param0 = 1;
10130 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10131 Param2 = Intrinsic::arm_mve_abd_predicated;
10132 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10133 break;
10134 case ARM::BI__builtin_arm_mve_vabdq_m_u32:
10135 Param0 = 1;
10136 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10137 Param2 = Intrinsic::arm_mve_abd_predicated;
10138 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10139 break;
10140 case ARM::BI__builtin_arm_mve_vabdq_m_u8:
10141 Param0 = 1;
10142 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10143 Param2 = Intrinsic::arm_mve_abd_predicated;
10144 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10145 break;
10146 case ARM::BI__builtin_arm_mve_vhaddq_m_s16:
10147 Param0 = 0;
10148 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10149 Param2 = Intrinsic::arm_mve_hadd_predicated;
10150 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10151 break;
10152 case ARM::BI__builtin_arm_mve_vhaddq_m_s32:
10153 Param0 = 0;
10154 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10155 Param2 = Intrinsic::arm_mve_hadd_predicated;
10156 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10157 break;
10158 case ARM::BI__builtin_arm_mve_vhaddq_m_s8:
10159 Param0 = 0;
10160 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10161 Param2 = Intrinsic::arm_mve_hadd_predicated;
10162 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10163 break;
10164 case ARM::BI__builtin_arm_mve_vhaddq_m_u16:
10165 Param0 = 1;
10166 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10167 Param2 = Intrinsic::arm_mve_hadd_predicated;
10168 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10169 break;
10170 case ARM::BI__builtin_arm_mve_vhaddq_m_u32:
10171 Param0 = 1;
10172 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10173 Param2 = Intrinsic::arm_mve_hadd_predicated;
10174 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10175 break;
10176 case ARM::BI__builtin_arm_mve_vhaddq_m_u8:
10177 Param0 = 1;
10178 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10179 Param2 = Intrinsic::arm_mve_hadd_predicated;
10180 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10181 break;
10182 case ARM::BI__builtin_arm_mve_vhsubq_m_s16:
10183 Param0 = 0;
10184 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10185 Param2 = Intrinsic::arm_mve_hsub_predicated;
10186 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10187 break;
10188 case ARM::BI__builtin_arm_mve_vhsubq_m_s32:
10189 Param0 = 0;
10190 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10191 Param2 = Intrinsic::arm_mve_hsub_predicated;
10192 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10193 break;
10194 case ARM::BI__builtin_arm_mve_vhsubq_m_s8:
10195 Param0 = 0;
10196 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10197 Param2 = Intrinsic::arm_mve_hsub_predicated;
10198 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10199 break;
10200 case ARM::BI__builtin_arm_mve_vhsubq_m_u16:
10201 Param0 = 1;
10202 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10203 Param2 = Intrinsic::arm_mve_hsub_predicated;
10204 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10205 break;
10206 case ARM::BI__builtin_arm_mve_vhsubq_m_u32:
10207 Param0 = 1;
10208 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10209 Param2 = Intrinsic::arm_mve_hsub_predicated;
10210 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10211 break;
10212 case ARM::BI__builtin_arm_mve_vhsubq_m_u8:
10213 Param0 = 1;
10214 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10215 Param2 = Intrinsic::arm_mve_hsub_predicated;
10216 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10217 break;
10218 case ARM::BI__builtin_arm_mve_vmaxnmq_m_f16:
10219 Param0 = 0;
10220 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10221 Param2 = Intrinsic::arm_mve_max_predicated;
10222 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
10223 break;
10224 case ARM::BI__builtin_arm_mve_vmaxnmq_m_f32:
10225 Param0 = 0;
10226 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10227 Param2 = Intrinsic::arm_mve_max_predicated;
10228 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
10229 break;
10230 case ARM::BI__builtin_arm_mve_vmaxq_m_s16:
10231 Param0 = 0;
10232 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10233 Param2 = Intrinsic::arm_mve_max_predicated;
10234 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10235 break;
10236 case ARM::BI__builtin_arm_mve_vmaxq_m_s32:
10237 Param0 = 0;
10238 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10239 Param2 = Intrinsic::arm_mve_max_predicated;
10240 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10241 break;
10242 case ARM::BI__builtin_arm_mve_vmaxq_m_s8:
10243 Param0 = 0;
10244 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10245 Param2 = Intrinsic::arm_mve_max_predicated;
10246 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10247 break;
10248 case ARM::BI__builtin_arm_mve_vmaxq_m_u16:
10249 Param0 = 1;
10250 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10251 Param2 = Intrinsic::arm_mve_max_predicated;
10252 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10253 break;
10254 case ARM::BI__builtin_arm_mve_vmaxq_m_u32:
10255 Param0 = 1;
10256 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10257 Param2 = Intrinsic::arm_mve_max_predicated;
10258 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10259 break;
10260 case ARM::BI__builtin_arm_mve_vmaxq_m_u8:
10261 Param0 = 1;
10262 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10263 Param2 = Intrinsic::arm_mve_max_predicated;
10264 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10265 break;
10266 case ARM::BI__builtin_arm_mve_vminnmq_m_f16:
10267 Param0 = 0;
10268 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10269 Param2 = Intrinsic::arm_mve_min_predicated;
10270 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
10271 break;
10272 case ARM::BI__builtin_arm_mve_vminnmq_m_f32:
10273 Param0 = 0;
10274 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10275 Param2 = Intrinsic::arm_mve_min_predicated;
10276 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
10277 break;
10278 case ARM::BI__builtin_arm_mve_vminq_m_s16:
10279 Param0 = 0;
10280 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10281 Param2 = Intrinsic::arm_mve_min_predicated;
10282 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10283 break;
10284 case ARM::BI__builtin_arm_mve_vminq_m_s32:
10285 Param0 = 0;
10286 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10287 Param2 = Intrinsic::arm_mve_min_predicated;
10288 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10289 break;
10290 case ARM::BI__builtin_arm_mve_vminq_m_s8:
10291 Param0 = 0;
10292 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10293 Param2 = Intrinsic::arm_mve_min_predicated;
10294 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10295 break;
10296 case ARM::BI__builtin_arm_mve_vminq_m_u16:
10297 Param0 = 1;
10298 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10299 Param2 = Intrinsic::arm_mve_min_predicated;
10300 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10301 break;
10302 case ARM::BI__builtin_arm_mve_vminq_m_u32:
10303 Param0 = 1;
10304 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10305 Param2 = Intrinsic::arm_mve_min_predicated;
10306 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10307 break;
10308 case ARM::BI__builtin_arm_mve_vminq_m_u8:
10309 Param0 = 1;
10310 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10311 Param2 = Intrinsic::arm_mve_min_predicated;
10312 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10313 break;
10314 case ARM::BI__builtin_arm_mve_vmulhq_m_s16:
10315 Param0 = 0;
10316 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10317 Param2 = Intrinsic::arm_mve_mulh_predicated;
10318 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10319 break;
10320 case ARM::BI__builtin_arm_mve_vmulhq_m_s32:
10321 Param0 = 0;
10322 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10323 Param2 = Intrinsic::arm_mve_mulh_predicated;
10324 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10325 break;
10326 case ARM::BI__builtin_arm_mve_vmulhq_m_s8:
10327 Param0 = 0;
10328 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10329 Param2 = Intrinsic::arm_mve_mulh_predicated;
10330 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10331 break;
10332 case ARM::BI__builtin_arm_mve_vmulhq_m_u16:
10333 Param0 = 1;
10334 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10335 Param2 = Intrinsic::arm_mve_mulh_predicated;
10336 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10337 break;
10338 case ARM::BI__builtin_arm_mve_vmulhq_m_u32:
10339 Param0 = 1;
10340 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10341 Param2 = Intrinsic::arm_mve_mulh_predicated;
10342 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10343 break;
10344 case ARM::BI__builtin_arm_mve_vmulhq_m_u8:
10345 Param0 = 1;
10346 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10347 Param2 = Intrinsic::arm_mve_mulh_predicated;
10348 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10349 break;
10350 case ARM::BI__builtin_arm_mve_vqaddq_m_s16:
10351 Param0 = 0;
10352 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10353 Param2 = Intrinsic::arm_mve_qadd_predicated;
10354 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10355 break;
10356 case ARM::BI__builtin_arm_mve_vqaddq_m_s32:
10357 Param0 = 0;
10358 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10359 Param2 = Intrinsic::arm_mve_qadd_predicated;
10360 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10361 break;
10362 case ARM::BI__builtin_arm_mve_vqaddq_m_s8:
10363 Param0 = 0;
10364 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10365 Param2 = Intrinsic::arm_mve_qadd_predicated;
10366 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10367 break;
10368 case ARM::BI__builtin_arm_mve_vqaddq_m_u16:
10369 Param0 = 1;
10370 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10371 Param2 = Intrinsic::arm_mve_qadd_predicated;
10372 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10373 break;
10374 case ARM::BI__builtin_arm_mve_vqaddq_m_u32:
10375 Param0 = 1;
10376 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10377 Param2 = Intrinsic::arm_mve_qadd_predicated;
10378 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10379 break;
10380 case ARM::BI__builtin_arm_mve_vqaddq_m_u8:
10381 Param0 = 1;
10382 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10383 Param2 = Intrinsic::arm_mve_qadd_predicated;
10384 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10385 break;
10386 case ARM::BI__builtin_arm_mve_vqshlq_m_n_s16:
10387 Param0 = 0;
10388 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10389 Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
10390 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10391 break;
10392 case ARM::BI__builtin_arm_mve_vqshlq_m_n_s32:
10393 Param0 = 0;
10394 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10395 Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
10396 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10397 break;
10398 case ARM::BI__builtin_arm_mve_vqshlq_m_n_s8:
10399 Param0 = 0;
10400 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10401 Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
10402 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10403 break;
10404 case ARM::BI__builtin_arm_mve_vqshlq_m_n_u16:
10405 Param0 = 1;
10406 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10407 Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
10408 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10409 break;
10410 case ARM::BI__builtin_arm_mve_vqshlq_m_n_u32:
10411 Param0 = 1;
10412 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10413 Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
10414 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10415 break;
10416 case ARM::BI__builtin_arm_mve_vqshlq_m_n_u8:
10417 Param0 = 1;
10418 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10419 Param2 = Intrinsic::arm_mve_vqshl_imm_predicated;
10420 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10421 break;
10422 case ARM::BI__builtin_arm_mve_vqsubq_m_s16:
10423 Param0 = 0;
10424 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10425 Param2 = Intrinsic::arm_mve_qsub_predicated;
10426 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10427 break;
10428 case ARM::BI__builtin_arm_mve_vqsubq_m_s32:
10429 Param0 = 0;
10430 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10431 Param2 = Intrinsic::arm_mve_qsub_predicated;
10432 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10433 break;
10434 case ARM::BI__builtin_arm_mve_vqsubq_m_s8:
10435 Param0 = 0;
10436 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10437 Param2 = Intrinsic::arm_mve_qsub_predicated;
10438 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10439 break;
10440 case ARM::BI__builtin_arm_mve_vqsubq_m_u16:
10441 Param0 = 1;
10442 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10443 Param2 = Intrinsic::arm_mve_qsub_predicated;
10444 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10445 break;
10446 case ARM::BI__builtin_arm_mve_vqsubq_m_u32:
10447 Param0 = 1;
10448 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10449 Param2 = Intrinsic::arm_mve_qsub_predicated;
10450 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10451 break;
10452 case ARM::BI__builtin_arm_mve_vqsubq_m_u8:
10453 Param0 = 1;
10454 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10455 Param2 = Intrinsic::arm_mve_qsub_predicated;
10456 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10457 break;
10458 case ARM::BI__builtin_arm_mve_vrhaddq_m_s16:
10459 Param0 = 0;
10460 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10461 Param2 = Intrinsic::arm_mve_rhadd_predicated;
10462 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10463 break;
10464 case ARM::BI__builtin_arm_mve_vrhaddq_m_s32:
10465 Param0 = 0;
10466 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10467 Param2 = Intrinsic::arm_mve_rhadd_predicated;
10468 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10469 break;
10470 case ARM::BI__builtin_arm_mve_vrhaddq_m_s8:
10471 Param0 = 0;
10472 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10473 Param2 = Intrinsic::arm_mve_rhadd_predicated;
10474 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10475 break;
10476 case ARM::BI__builtin_arm_mve_vrhaddq_m_u16:
10477 Param0 = 1;
10478 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10479 Param2 = Intrinsic::arm_mve_rhadd_predicated;
10480 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10481 break;
10482 case ARM::BI__builtin_arm_mve_vrhaddq_m_u32:
10483 Param0 = 1;
10484 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10485 Param2 = Intrinsic::arm_mve_rhadd_predicated;
10486 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10487 break;
10488 case ARM::BI__builtin_arm_mve_vrhaddq_m_u8:
10489 Param0 = 1;
10490 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10491 Param2 = Intrinsic::arm_mve_rhadd_predicated;
10492 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10493 break;
10494 case ARM::BI__builtin_arm_mve_vrmulhq_m_s16:
10495 Param0 = 0;
10496 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10497 Param2 = Intrinsic::arm_mve_rmulh_predicated;
10498 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10499 break;
10500 case ARM::BI__builtin_arm_mve_vrmulhq_m_s32:
10501 Param0 = 0;
10502 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10503 Param2 = Intrinsic::arm_mve_rmulh_predicated;
10504 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10505 break;
10506 case ARM::BI__builtin_arm_mve_vrmulhq_m_s8:
10507 Param0 = 0;
10508 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10509 Param2 = Intrinsic::arm_mve_rmulh_predicated;
10510 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10511 break;
10512 case ARM::BI__builtin_arm_mve_vrmulhq_m_u16:
10513 Param0 = 1;
10514 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10515 Param2 = Intrinsic::arm_mve_rmulh_predicated;
10516 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10517 break;
10518 case ARM::BI__builtin_arm_mve_vrmulhq_m_u32:
10519 Param0 = 1;
10520 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10521 Param2 = Intrinsic::arm_mve_rmulh_predicated;
10522 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10523 break;
10524 case ARM::BI__builtin_arm_mve_vrmulhq_m_u8:
10525 Param0 = 1;
10526 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10527 Param2 = Intrinsic::arm_mve_rmulh_predicated;
10528 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10529 break;
10530 case ARM::BI__builtin_arm_mve_vrshrq_m_n_s16:
10531 Param0 = 0;
10532 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10533 Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
10534 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10535 break;
10536 case ARM::BI__builtin_arm_mve_vrshrq_m_n_s32:
10537 Param0 = 0;
10538 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10539 Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
10540 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10541 break;
10542 case ARM::BI__builtin_arm_mve_vrshrq_m_n_s8:
10543 Param0 = 0;
10544 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10545 Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
10546 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10547 break;
10548 case ARM::BI__builtin_arm_mve_vrshrq_m_n_u16:
10549 Param0 = 1;
10550 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10551 Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
10552 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10553 break;
10554 case ARM::BI__builtin_arm_mve_vrshrq_m_n_u32:
10555 Param0 = 1;
10556 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10557 Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
10558 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10559 break;
10560 case ARM::BI__builtin_arm_mve_vrshrq_m_n_u8:
10561 Param0 = 1;
10562 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10563 Param2 = Intrinsic::arm_mve_vrshr_imm_predicated;
10564 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10565 break;
10566 case ARM::BI__builtin_arm_mve_vshrq_m_n_s16:
10567 Param0 = 0;
10568 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10569 Param2 = Intrinsic::arm_mve_shr_imm_predicated;
10570 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10571 break;
10572 case ARM::BI__builtin_arm_mve_vshrq_m_n_s32:
10573 Param0 = 0;
10574 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10575 Param2 = Intrinsic::arm_mve_shr_imm_predicated;
10576 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10577 break;
10578 case ARM::BI__builtin_arm_mve_vshrq_m_n_s8:
10579 Param0 = 0;
10580 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10581 Param2 = Intrinsic::arm_mve_shr_imm_predicated;
10582 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10583 break;
10584 case ARM::BI__builtin_arm_mve_vshrq_m_n_u16:
10585 Param0 = 1;
10586 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10587 Param2 = Intrinsic::arm_mve_shr_imm_predicated;
10588 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10589 break;
10590 case ARM::BI__builtin_arm_mve_vshrq_m_n_u32:
10591 Param0 = 1;
10592 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10593 Param2 = Intrinsic::arm_mve_shr_imm_predicated;
10594 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10595 break;
10596 case ARM::BI__builtin_arm_mve_vshrq_m_n_u8:
10597 Param0 = 1;
10598 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10599 Param2 = Intrinsic::arm_mve_shr_imm_predicated;
10600 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
10601 break;
10602 }
10603 Value *Val0 = EmitScalarExpr(E->getArg(1));
10604 Value *Val1 = EmitScalarExpr(E->getArg(2));
10605 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
10606 Value *Val3 = EmitScalarExpr(E->getArg(3));
10607 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
10608 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
10609 Value *Val6 = EmitScalarExpr(E->getArg(0));
10610 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val2, Val5, Val6});
10611}
10612case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p16:
10613case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p8:
10614case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p16:
10615case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p8:
10616case ARM::BI__builtin_arm_mve_vqdmullbq_m_s16:
10617case ARM::BI__builtin_arm_mve_vqdmullbq_m_s32:
10618case ARM::BI__builtin_arm_mve_vqdmulltq_m_s16:
10619case ARM::BI__builtin_arm_mve_vqdmulltq_m_s32: {
10620 uint32_t Param0;
10621 llvm::Type * Param1;
10622 Intrinsic::ID Param2;
10623 llvm::Type * Param3;
10624 llvm::Type * Param4;
10625 switch (BuiltinID) {
10626 case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p16:
10627 Param0 = 0;
10628 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10629 Param2 = Intrinsic::arm_mve_mull_poly_predicated;
10630 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10631 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10632 break;
10633 case ARM::BI__builtin_arm_mve_vmullbq_poly_m_p8:
10634 Param0 = 0;
10635 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10636 Param2 = Intrinsic::arm_mve_mull_poly_predicated;
10637 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10638 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
10639 break;
10640 case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p16:
10641 Param0 = 1;
10642 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10643 Param2 = Intrinsic::arm_mve_mull_poly_predicated;
10644 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10645 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10646 break;
10647 case ARM::BI__builtin_arm_mve_vmulltq_poly_m_p8:
10648 Param0 = 1;
10649 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10650 Param2 = Intrinsic::arm_mve_mull_poly_predicated;
10651 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
10652 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
10653 break;
10654 case ARM::BI__builtin_arm_mve_vqdmullbq_m_s16:
10655 Param0 = 0;
10656 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10657 Param2 = Intrinsic::arm_mve_vqdmull_predicated;
10658 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10659 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10660 break;
10661 case ARM::BI__builtin_arm_mve_vqdmullbq_m_s32:
10662 Param0 = 0;
10663 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10664 Param2 = Intrinsic::arm_mve_vqdmull_predicated;
10665 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
10666 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10667 break;
10668 case ARM::BI__builtin_arm_mve_vqdmulltq_m_s16:
10669 Param0 = 1;
10670 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10671 Param2 = Intrinsic::arm_mve_vqdmull_predicated;
10672 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
10673 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10674 break;
10675 case ARM::BI__builtin_arm_mve_vqdmulltq_m_s32:
10676 Param0 = 1;
10677 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10678 Param2 = Intrinsic::arm_mve_vqdmull_predicated;
10679 Param3 = llvm::FixedVectorType::get(Int64Ty, 2);
10680 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10681 break;
10682 }
10683 Value *Val0 = EmitScalarExpr(E->getArg(1));
10684 Value *Val1 = EmitScalarExpr(E->getArg(2));
10685 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
10686 Value *Val3 = EmitScalarExpr(E->getArg(3));
10687 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
10688 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
10689 Value *Val6 = EmitScalarExpr(E->getArg(0));
10690 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param4, Param1}), {Val0, Val1, Val2, Val5, Val6});
10691}
10692case ARM::BI__builtin_arm_mve_vmullbq_int_m_s16:
10693case ARM::BI__builtin_arm_mve_vmullbq_int_m_s32:
10694case ARM::BI__builtin_arm_mve_vmullbq_int_m_s8:
10695case ARM::BI__builtin_arm_mve_vmullbq_int_m_u16:
10696case ARM::BI__builtin_arm_mve_vmullbq_int_m_u32:
10697case ARM::BI__builtin_arm_mve_vmullbq_int_m_u8:
10698case ARM::BI__builtin_arm_mve_vmulltq_int_m_s16:
10699case ARM::BI__builtin_arm_mve_vmulltq_int_m_s32:
10700case ARM::BI__builtin_arm_mve_vmulltq_int_m_s8:
10701case ARM::BI__builtin_arm_mve_vmulltq_int_m_u16:
10702case ARM::BI__builtin_arm_mve_vmulltq_int_m_u32:
10703case ARM::BI__builtin_arm_mve_vmulltq_int_m_u8:
10704case ARM::BI__builtin_arm_mve_vshllbq_m_n_s16:
10705case ARM::BI__builtin_arm_mve_vshllbq_m_n_s8:
10706case ARM::BI__builtin_arm_mve_vshllbq_m_n_u16:
10707case ARM::BI__builtin_arm_mve_vshllbq_m_n_u8:
10708case ARM::BI__builtin_arm_mve_vshlltq_m_n_s16:
10709case ARM::BI__builtin_arm_mve_vshlltq_m_n_s8:
10710case ARM::BI__builtin_arm_mve_vshlltq_m_n_u16:
10711case ARM::BI__builtin_arm_mve_vshlltq_m_n_u8: {
10712 uint32_t Param0;
10713 uint32_t Param1;
10714 llvm::Type * Param2;
10715 Intrinsic::ID Param3;
10716 llvm::Type * Param4;
10717 llvm::Type * Param5;
10718 switch (BuiltinID) {
10719 case ARM::BI__builtin_arm_mve_vmullbq_int_m_s16:
10720 Param0 = 0;
10721 Param1 = 0;
10722 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10723 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10724 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10725 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10726 break;
10727 case ARM::BI__builtin_arm_mve_vmullbq_int_m_s32:
10728 Param0 = 0;
10729 Param1 = 0;
10730 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10731 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10732 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
10733 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
10734 break;
10735 case ARM::BI__builtin_arm_mve_vmullbq_int_m_s8:
10736 Param0 = 0;
10737 Param1 = 0;
10738 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10739 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10740 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10741 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10742 break;
10743 case ARM::BI__builtin_arm_mve_vmullbq_int_m_u16:
10744 Param0 = 1;
10745 Param1 = 0;
10746 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10747 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10748 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10749 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10750 break;
10751 case ARM::BI__builtin_arm_mve_vmullbq_int_m_u32:
10752 Param0 = 1;
10753 Param1 = 0;
10754 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10755 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10756 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
10757 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
10758 break;
10759 case ARM::BI__builtin_arm_mve_vmullbq_int_m_u8:
10760 Param0 = 1;
10761 Param1 = 0;
10762 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10763 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10764 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10765 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10766 break;
10767 case ARM::BI__builtin_arm_mve_vmulltq_int_m_s16:
10768 Param0 = 0;
10769 Param1 = 1;
10770 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10771 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10772 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10773 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10774 break;
10775 case ARM::BI__builtin_arm_mve_vmulltq_int_m_s32:
10776 Param0 = 0;
10777 Param1 = 1;
10778 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10779 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10780 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
10781 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
10782 break;
10783 case ARM::BI__builtin_arm_mve_vmulltq_int_m_s8:
10784 Param0 = 0;
10785 Param1 = 1;
10786 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10787 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10788 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10789 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10790 break;
10791 case ARM::BI__builtin_arm_mve_vmulltq_int_m_u16:
10792 Param0 = 1;
10793 Param1 = 1;
10794 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10795 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10796 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10797 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10798 break;
10799 case ARM::BI__builtin_arm_mve_vmulltq_int_m_u32:
10800 Param0 = 1;
10801 Param1 = 1;
10802 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10803 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10804 Param4 = llvm::FixedVectorType::get(Int64Ty, 2);
10805 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
10806 break;
10807 case ARM::BI__builtin_arm_mve_vmulltq_int_m_u8:
10808 Param0 = 1;
10809 Param1 = 1;
10810 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10811 Param3 = Intrinsic::arm_mve_mull_int_predicated;
10812 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10813 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10814 break;
10815 case ARM::BI__builtin_arm_mve_vshllbq_m_n_s16:
10816 Param0 = 0;
10817 Param1 = 0;
10818 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10819 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10820 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10821 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10822 break;
10823 case ARM::BI__builtin_arm_mve_vshllbq_m_n_s8:
10824 Param0 = 0;
10825 Param1 = 0;
10826 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10827 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10828 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10829 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10830 break;
10831 case ARM::BI__builtin_arm_mve_vshllbq_m_n_u16:
10832 Param0 = 1;
10833 Param1 = 0;
10834 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10835 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10836 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10837 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10838 break;
10839 case ARM::BI__builtin_arm_mve_vshllbq_m_n_u8:
10840 Param0 = 1;
10841 Param1 = 0;
10842 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10843 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10844 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10845 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10846 break;
10847 case ARM::BI__builtin_arm_mve_vshlltq_m_n_s16:
10848 Param0 = 0;
10849 Param1 = 1;
10850 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10851 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10852 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10853 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10854 break;
10855 case ARM::BI__builtin_arm_mve_vshlltq_m_n_s8:
10856 Param0 = 0;
10857 Param1 = 1;
10858 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10859 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10860 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10861 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10862 break;
10863 case ARM::BI__builtin_arm_mve_vshlltq_m_n_u16:
10864 Param0 = 1;
10865 Param1 = 1;
10866 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10867 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10868 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10869 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
10870 break;
10871 case ARM::BI__builtin_arm_mve_vshlltq_m_n_u8:
10872 Param0 = 1;
10873 Param1 = 1;
10874 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10875 Param3 = Intrinsic::arm_mve_vshll_imm_predicated;
10876 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10877 Param5 = llvm::FixedVectorType::get(Int8Ty, 16);
10878 break;
10879 }
10880 Value *Val0 = EmitScalarExpr(E->getArg(1));
10881 Value *Val1 = EmitScalarExpr(E->getArg(2));
10882 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
10883 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
10884 Value *Val4 = EmitScalarExpr(E->getArg(3));
10885 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
10886 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val5});
10887 Value *Val7 = EmitScalarExpr(E->getArg(0));
10888 return Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4, Param5, Param2}), {Val0, Val1, Val2, Val3, Val6, Val7});
10889}
10890case ARM::BI__builtin_arm_mve_vqrshlq_m_s16:
10891case ARM::BI__builtin_arm_mve_vqrshlq_m_s32:
10892case ARM::BI__builtin_arm_mve_vqrshlq_m_s8:
10893case ARM::BI__builtin_arm_mve_vqrshlq_m_u16:
10894case ARM::BI__builtin_arm_mve_vqrshlq_m_u32:
10895case ARM::BI__builtin_arm_mve_vqrshlq_m_u8:
10896case ARM::BI__builtin_arm_mve_vqshlq_m_s16:
10897case ARM::BI__builtin_arm_mve_vqshlq_m_s32:
10898case ARM::BI__builtin_arm_mve_vqshlq_m_s8:
10899case ARM::BI__builtin_arm_mve_vqshlq_m_u16:
10900case ARM::BI__builtin_arm_mve_vqshlq_m_u32:
10901case ARM::BI__builtin_arm_mve_vqshlq_m_u8:
10902case ARM::BI__builtin_arm_mve_vrshlq_m_s16:
10903case ARM::BI__builtin_arm_mve_vrshlq_m_s32:
10904case ARM::BI__builtin_arm_mve_vrshlq_m_s8:
10905case ARM::BI__builtin_arm_mve_vrshlq_m_u16:
10906case ARM::BI__builtin_arm_mve_vrshlq_m_u32:
10907case ARM::BI__builtin_arm_mve_vrshlq_m_u8:
10908case ARM::BI__builtin_arm_mve_vshlq_m_s16:
10909case ARM::BI__builtin_arm_mve_vshlq_m_s32:
10910case ARM::BI__builtin_arm_mve_vshlq_m_s8:
10911case ARM::BI__builtin_arm_mve_vshlq_m_u16:
10912case ARM::BI__builtin_arm_mve_vshlq_m_u32:
10913case ARM::BI__builtin_arm_mve_vshlq_m_u8: {
10914 uint32_t Param0;
10915 uint32_t Param1;
10916 uint32_t Param2;
10917 llvm::Type * Param3;
10918 llvm::Type * Param4;
10919 switch (BuiltinID) {
10920 case ARM::BI__builtin_arm_mve_vqrshlq_m_s16:
10921 Param0 = 1;
10922 Param1 = 1;
10923 Param2 = 0;
10924 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10925 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10926 break;
10927 case ARM::BI__builtin_arm_mve_vqrshlq_m_s32:
10928 Param0 = 1;
10929 Param1 = 1;
10930 Param2 = 0;
10931 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10932 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10933 break;
10934 case ARM::BI__builtin_arm_mve_vqrshlq_m_s8:
10935 Param0 = 1;
10936 Param1 = 1;
10937 Param2 = 0;
10938 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10939 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
10940 break;
10941 case ARM::BI__builtin_arm_mve_vqrshlq_m_u16:
10942 Param0 = 1;
10943 Param1 = 1;
10944 Param2 = 1;
10945 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10946 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10947 break;
10948 case ARM::BI__builtin_arm_mve_vqrshlq_m_u32:
10949 Param0 = 1;
10950 Param1 = 1;
10951 Param2 = 1;
10952 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10953 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10954 break;
10955 case ARM::BI__builtin_arm_mve_vqrshlq_m_u8:
10956 Param0 = 1;
10957 Param1 = 1;
10958 Param2 = 1;
10959 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10960 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
10961 break;
10962 case ARM::BI__builtin_arm_mve_vqshlq_m_s16:
10963 Param0 = 1;
10964 Param1 = 0;
10965 Param2 = 0;
10966 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10967 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10968 break;
10969 case ARM::BI__builtin_arm_mve_vqshlq_m_s32:
10970 Param0 = 1;
10971 Param1 = 0;
10972 Param2 = 0;
10973 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10974 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10975 break;
10976 case ARM::BI__builtin_arm_mve_vqshlq_m_s8:
10977 Param0 = 1;
10978 Param1 = 0;
10979 Param2 = 0;
10980 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
10981 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
10982 break;
10983 case ARM::BI__builtin_arm_mve_vqshlq_m_u16:
10984 Param0 = 1;
10985 Param1 = 0;
10986 Param2 = 1;
10987 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
10988 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
10989 break;
10990 case ARM::BI__builtin_arm_mve_vqshlq_m_u32:
10991 Param0 = 1;
10992 Param1 = 0;
10993 Param2 = 1;
10994 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
10995 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
10996 break;
10997 case ARM::BI__builtin_arm_mve_vqshlq_m_u8:
10998 Param0 = 1;
10999 Param1 = 0;
11000 Param2 = 1;
11001 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11002 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11003 break;
11004 case ARM::BI__builtin_arm_mve_vrshlq_m_s16:
11005 Param0 = 0;
11006 Param1 = 1;
11007 Param2 = 0;
11008 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11009 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11010 break;
11011 case ARM::BI__builtin_arm_mve_vrshlq_m_s32:
11012 Param0 = 0;
11013 Param1 = 1;
11014 Param2 = 0;
11015 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11016 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
11017 break;
11018 case ARM::BI__builtin_arm_mve_vrshlq_m_s8:
11019 Param0 = 0;
11020 Param1 = 1;
11021 Param2 = 0;
11022 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11023 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11024 break;
11025 case ARM::BI__builtin_arm_mve_vrshlq_m_u16:
11026 Param0 = 0;
11027 Param1 = 1;
11028 Param2 = 1;
11029 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11030 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11031 break;
11032 case ARM::BI__builtin_arm_mve_vrshlq_m_u32:
11033 Param0 = 0;
11034 Param1 = 1;
11035 Param2 = 1;
11036 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11037 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
11038 break;
11039 case ARM::BI__builtin_arm_mve_vrshlq_m_u8:
11040 Param0 = 0;
11041 Param1 = 1;
11042 Param2 = 1;
11043 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11044 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11045 break;
11046 case ARM::BI__builtin_arm_mve_vshlq_m_s16:
11047 Param0 = 0;
11048 Param1 = 0;
11049 Param2 = 0;
11050 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11051 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11052 break;
11053 case ARM::BI__builtin_arm_mve_vshlq_m_s32:
11054 Param0 = 0;
11055 Param1 = 0;
11056 Param2 = 0;
11057 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11058 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
11059 break;
11060 case ARM::BI__builtin_arm_mve_vshlq_m_s8:
11061 Param0 = 0;
11062 Param1 = 0;
11063 Param2 = 0;
11064 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11065 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11066 break;
11067 case ARM::BI__builtin_arm_mve_vshlq_m_u16:
11068 Param0 = 0;
11069 Param1 = 0;
11070 Param2 = 1;
11071 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11072 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11073 break;
11074 case ARM::BI__builtin_arm_mve_vshlq_m_u32:
11075 Param0 = 0;
11076 Param1 = 0;
11077 Param2 = 1;
11078 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11079 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
11080 break;
11081 case ARM::BI__builtin_arm_mve_vshlq_m_u8:
11082 Param0 = 0;
11083 Param1 = 0;
11084 Param2 = 1;
11085 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11086 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11087 break;
11088 }
11089 Value *Val0 = EmitScalarExpr(E->getArg(1));
11090 Value *Val1 = EmitScalarExpr(E->getArg(2));
11091 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
11092 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
11093 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param2);
11094 Value *Val5 = EmitScalarExpr(E->getArg(3));
11095 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
11096 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val6});
11097 Value *Val8 = EmitScalarExpr(E->getArg(0));
11098 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {Param4, Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val7, Val8});
11099}
11100case ARM::BI__builtin_arm_mve_vaddlvaq_s32:
11101case ARM::BI__builtin_arm_mve_vaddlvaq_u32:
11102case ARM::BI__builtin_arm_mve_vaddvaq_s16:
11103case ARM::BI__builtin_arm_mve_vaddvaq_s32:
11104case ARM::BI__builtin_arm_mve_vaddvaq_s8:
11105case ARM::BI__builtin_arm_mve_vaddvaq_u16:
11106case ARM::BI__builtin_arm_mve_vaddvaq_u32:
11107case ARM::BI__builtin_arm_mve_vaddvaq_u8: {
11108 uint32_t Param0;
11109 Intrinsic::ID Param1;
11110 llvm::Type * Param2;
11111 switch (BuiltinID) {
11112 case ARM::BI__builtin_arm_mve_vaddlvaq_s32:
11113 Param0 = 0;
11114 Param1 = Intrinsic::arm_mve_addlv;
11115 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11116 break;
11117 case ARM::BI__builtin_arm_mve_vaddlvaq_u32:
11118 Param0 = 1;
11119 Param1 = Intrinsic::arm_mve_addlv;
11120 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11121 break;
11122 case ARM::BI__builtin_arm_mve_vaddvaq_s16:
11123 Param0 = 0;
11124 Param1 = Intrinsic::arm_mve_addv;
11125 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11126 break;
11127 case ARM::BI__builtin_arm_mve_vaddvaq_s32:
11128 Param0 = 0;
11129 Param1 = Intrinsic::arm_mve_addv;
11130 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11131 break;
11132 case ARM::BI__builtin_arm_mve_vaddvaq_s8:
11133 Param0 = 0;
11134 Param1 = Intrinsic::arm_mve_addv;
11135 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11136 break;
11137 case ARM::BI__builtin_arm_mve_vaddvaq_u16:
11138 Param0 = 1;
11139 Param1 = Intrinsic::arm_mve_addv;
11140 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11141 break;
11142 case ARM::BI__builtin_arm_mve_vaddvaq_u32:
11143 Param0 = 1;
11144 Param1 = Intrinsic::arm_mve_addv;
11145 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11146 break;
11147 case ARM::BI__builtin_arm_mve_vaddvaq_u8:
11148 Param0 = 1;
11149 Param1 = Intrinsic::arm_mve_addv;
11150 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11151 break;
11152 }
11153 Value *Val0 = EmitScalarExpr(E->getArg(1));
11154 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
11155 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1});
11156 Value *Val3 = EmitScalarExpr(E->getArg(0));
11157 return Builder.CreateAdd(Val2, Val3);
11158}
11159case ARM::BI__builtin_arm_mve_vaddlvaq_p_s32:
11160case ARM::BI__builtin_arm_mve_vaddlvaq_p_u32:
11161case ARM::BI__builtin_arm_mve_vaddvaq_p_s16:
11162case ARM::BI__builtin_arm_mve_vaddvaq_p_s32:
11163case ARM::BI__builtin_arm_mve_vaddvaq_p_s8:
11164case ARM::BI__builtin_arm_mve_vaddvaq_p_u16:
11165case ARM::BI__builtin_arm_mve_vaddvaq_p_u32:
11166case ARM::BI__builtin_arm_mve_vaddvaq_p_u8: {
11167 uint32_t Param0;
11168 llvm::Type * Param1;
11169 Intrinsic::ID Param2;
11170 llvm::Type * Param3;
11171 switch (BuiltinID) {
11172 case ARM::BI__builtin_arm_mve_vaddlvaq_p_s32:
11173 Param0 = 0;
11174 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11175 Param2 = Intrinsic::arm_mve_addlv_predicated;
11176 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11177 break;
11178 case ARM::BI__builtin_arm_mve_vaddlvaq_p_u32:
11179 Param0 = 1;
11180 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11181 Param2 = Intrinsic::arm_mve_addlv_predicated;
11182 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11183 break;
11184 case ARM::BI__builtin_arm_mve_vaddvaq_p_s16:
11185 Param0 = 0;
11186 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11187 Param2 = Intrinsic::arm_mve_addv_predicated;
11188 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11189 break;
11190 case ARM::BI__builtin_arm_mve_vaddvaq_p_s32:
11191 Param0 = 0;
11192 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11193 Param2 = Intrinsic::arm_mve_addv_predicated;
11194 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11195 break;
11196 case ARM::BI__builtin_arm_mve_vaddvaq_p_s8:
11197 Param0 = 0;
11198 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11199 Param2 = Intrinsic::arm_mve_addv_predicated;
11200 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
11201 break;
11202 case ARM::BI__builtin_arm_mve_vaddvaq_p_u16:
11203 Param0 = 1;
11204 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11205 Param2 = Intrinsic::arm_mve_addv_predicated;
11206 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11207 break;
11208 case ARM::BI__builtin_arm_mve_vaddvaq_p_u32:
11209 Param0 = 1;
11210 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11211 Param2 = Intrinsic::arm_mve_addv_predicated;
11212 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11213 break;
11214 case ARM::BI__builtin_arm_mve_vaddvaq_p_u8:
11215 Param0 = 1;
11216 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11217 Param2 = Intrinsic::arm_mve_addv_predicated;
11218 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
11219 break;
11220 }
11221 Value *Val0 = EmitScalarExpr(E->getArg(1));
11222 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
11223 Value *Val2 = EmitScalarExpr(E->getArg(2));
11224 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
11225 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
11226 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val4});
11227 Value *Val6 = EmitScalarExpr(E->getArg(0));
11228 return Builder.CreateAdd(Val5, Val6);
11229}
11230case ARM::BI__builtin_arm_mve_vcvtq_m_f16_s16:
11231case ARM::BI__builtin_arm_mve_vcvtq_m_f16_u16:
11232case ARM::BI__builtin_arm_mve_vcvtq_m_f32_s32:
11233case ARM::BI__builtin_arm_mve_vcvtq_m_f32_u32:
11234case ARM::BI__builtin_arm_mve_vcvtq_m_s16_f16:
11235case ARM::BI__builtin_arm_mve_vcvtq_m_s32_f32:
11236case ARM::BI__builtin_arm_mve_vcvtq_m_u16_f16:
11237case ARM::BI__builtin_arm_mve_vcvtq_m_u32_f32: {
11238 uint32_t Param0;
11239 llvm::Type * Param1;
11240 llvm::Type * Param2;
11241 llvm::Type * Param3;
11242 switch (BuiltinID) {
11243 case ARM::BI__builtin_arm_mve_vcvtq_m_f16_s16:
11244 Param0 = 0;
11245 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11246 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
11247 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11248 break;
11249 case ARM::BI__builtin_arm_mve_vcvtq_m_f16_u16:
11250 Param0 = 1;
11251 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11252 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
11253 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11254 break;
11255 case ARM::BI__builtin_arm_mve_vcvtq_m_f32_s32:
11256 Param0 = 0;
11257 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11258 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
11259 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11260 break;
11261 case ARM::BI__builtin_arm_mve_vcvtq_m_f32_u32:
11262 Param0 = 1;
11263 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11264 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
11265 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11266 break;
11267 case ARM::BI__builtin_arm_mve_vcvtq_m_s16_f16:
11268 Param0 = 0;
11269 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11270 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11271 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
11272 break;
11273 case ARM::BI__builtin_arm_mve_vcvtq_m_s32_f32:
11274 Param0 = 0;
11275 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11276 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11277 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
11278 break;
11279 case ARM::BI__builtin_arm_mve_vcvtq_m_u16_f16:
11280 Param0 = 1;
11281 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11282 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11283 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
11284 break;
11285 case ARM::BI__builtin_arm_mve_vcvtq_m_u32_f32:
11286 Param0 = 1;
11287 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11288 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11289 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
11290 break;
11291 }
11292 Value *Val0 = EmitScalarExpr(E->getArg(1));
11293 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
11294 Value *Val2 = EmitScalarExpr(E->getArg(2));
11295 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
11296 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
11297 Value *Val5 = EmitScalarExpr(E->getArg(0));
11298 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {Param2, Param3, Param1}), {Val0, Val1, Val4, Val5});
11299}
11300case ARM::BI__builtin_arm_mve_vrev16q_m_s8:
11301case ARM::BI__builtin_arm_mve_vrev16q_m_u8:
11302case ARM::BI__builtin_arm_mve_vrev32q_m_f16:
11303case ARM::BI__builtin_arm_mve_vrev32q_m_s16:
11304case ARM::BI__builtin_arm_mve_vrev32q_m_s8:
11305case ARM::BI__builtin_arm_mve_vrev32q_m_u16:
11306case ARM::BI__builtin_arm_mve_vrev32q_m_u8:
11307case ARM::BI__builtin_arm_mve_vrev64q_m_f16:
11308case ARM::BI__builtin_arm_mve_vrev64q_m_f32:
11309case ARM::BI__builtin_arm_mve_vrev64q_m_s16:
11310case ARM::BI__builtin_arm_mve_vrev64q_m_s32:
11311case ARM::BI__builtin_arm_mve_vrev64q_m_s8:
11312case ARM::BI__builtin_arm_mve_vrev64q_m_u16:
11313case ARM::BI__builtin_arm_mve_vrev64q_m_u32:
11314case ARM::BI__builtin_arm_mve_vrev64q_m_u8: {
11315 uint32_t Param0;
11316 llvm::Type * Param1;
11317 llvm::Type * Param2;
11318 switch (BuiltinID) {
11319 case ARM::BI__builtin_arm_mve_vrev16q_m_s8:
11320 Param0 = 16;
11321 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11322 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11323 break;
11324 case ARM::BI__builtin_arm_mve_vrev16q_m_u8:
11325 Param0 = 16;
11326 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11327 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11328 break;
11329 case ARM::BI__builtin_arm_mve_vrev32q_m_f16:
11330 Param0 = 32;
11331 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11332 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
11333 break;
11334 case ARM::BI__builtin_arm_mve_vrev32q_m_s16:
11335 Param0 = 32;
11336 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11337 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11338 break;
11339 case ARM::BI__builtin_arm_mve_vrev32q_m_s8:
11340 Param0 = 32;
11341 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11342 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11343 break;
11344 case ARM::BI__builtin_arm_mve_vrev32q_m_u16:
11345 Param0 = 32;
11346 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11347 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11348 break;
11349 case ARM::BI__builtin_arm_mve_vrev32q_m_u8:
11350 Param0 = 32;
11351 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11352 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11353 break;
11354 case ARM::BI__builtin_arm_mve_vrev64q_m_f16:
11355 Param0 = 64;
11356 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11357 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
11358 break;
11359 case ARM::BI__builtin_arm_mve_vrev64q_m_f32:
11360 Param0 = 64;
11361 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11362 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
11363 break;
11364 case ARM::BI__builtin_arm_mve_vrev64q_m_s16:
11365 Param0 = 64;
11366 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11367 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11368 break;
11369 case ARM::BI__builtin_arm_mve_vrev64q_m_s32:
11370 Param0 = 64;
11371 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11372 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11373 break;
11374 case ARM::BI__builtin_arm_mve_vrev64q_m_s8:
11375 Param0 = 64;
11376 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11377 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11378 break;
11379 case ARM::BI__builtin_arm_mve_vrev64q_m_u16:
11380 Param0 = 64;
11381 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11382 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
11383 break;
11384 case ARM::BI__builtin_arm_mve_vrev64q_m_u32:
11385 Param0 = 64;
11386 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11387 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
11388 break;
11389 case ARM::BI__builtin_arm_mve_vrev64q_m_u8:
11390 Param0 = 64;
11391 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
11392 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
11393 break;
11394 }
11395 Value *Val0 = EmitScalarExpr(E->getArg(1));
11396 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
11397 Value *Val2 = EmitScalarExpr(E->getArg(2));
11398 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
11399 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val3});
11400 Value *Val5 = EmitScalarExpr(E->getArg(0));
11401 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {Param2, Param1}), {Val0, Val1, Val4, Val5});
11402}
11403case ARM::BI__builtin_arm_mve_vmovlbq_m_s16:
11404case ARM::BI__builtin_arm_mve_vmovlbq_m_s8:
11405case ARM::BI__builtin_arm_mve_vmovlbq_m_u16:
11406case ARM::BI__builtin_arm_mve_vmovlbq_m_u8:
11407case ARM::BI__builtin_arm_mve_vmovltq_m_s16:
11408case ARM::BI__builtin_arm_mve_vmovltq_m_s8:
11409case ARM::BI__builtin_arm_mve_vmovltq_m_u16:
11410case ARM::BI__builtin_arm_mve_vmovltq_m_u8: {
11411 uint32_t Param0;
11412 uint32_t Param1;
11413 llvm::Type * Param2;
11414 llvm::Type * Param3;
11415 llvm::Type * Param4;
11416 switch (BuiltinID) {
11417 case ARM::BI__builtin_arm_mve_vmovlbq_m_s16:
11418 Param0 = 0;
11419 Param1 = 0;
11420 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11421 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11422 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11423 break;
11424 case ARM::BI__builtin_arm_mve_vmovlbq_m_s8:
11425 Param0 = 0;
11426 Param1 = 0;
11427 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11428 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11429 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11430 break;
11431 case ARM::BI__builtin_arm_mve_vmovlbq_m_u16:
11432 Param0 = 1;
11433 Param1 = 0;
11434 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11435 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11436 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11437 break;
11438 case ARM::BI__builtin_arm_mve_vmovlbq_m_u8:
11439 Param0 = 1;
11440 Param1 = 0;
11441 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11442 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11443 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11444 break;
11445 case ARM::BI__builtin_arm_mve_vmovltq_m_s16:
11446 Param0 = 0;
11447 Param1 = 1;
11448 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11449 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11450 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11451 break;
11452 case ARM::BI__builtin_arm_mve_vmovltq_m_s8:
11453 Param0 = 0;
11454 Param1 = 1;
11455 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11456 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11457 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11458 break;
11459 case ARM::BI__builtin_arm_mve_vmovltq_m_u16:
11460 Param0 = 1;
11461 Param1 = 1;
11462 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11463 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
11464 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
11465 break;
11466 case ARM::BI__builtin_arm_mve_vmovltq_m_u8:
11467 Param0 = 1;
11468 Param1 = 1;
11469 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11470 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
11471 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
11472 break;
11473 }
11474 Value *Val0 = EmitScalarExpr(E->getArg(1));
11475 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param0);
11476 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param1);
11477 Value *Val3 = EmitScalarExpr(E->getArg(2));
11478 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
11479 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val4});
11480 Value *Val6 = EmitScalarExpr(E->getArg(0));
11481 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovl_predicated, {Param3, Param4, Param2}), {Val0, Val1, Val2, Val5, Val6});
11482}
11483case ARM::BI__builtin_arm_mve_vstrhq_s32:
11484case ARM::BI__builtin_arm_mve_vstrhq_u32: {
11485 Value *Val0 = EmitScalarExpr(E->getArg(1));
11486 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 4);
11487 Value *Val2 = Builder.CreateTrunc(Val0, Val1);
11488 Address Val3 = EmitPointerWithAlignment(E->getArg(0));
11489 Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
11490 Address Val5 = Address(Val4, CharUnits::fromQuantity(2));
11491 return Builder.CreateStore(Val2, Val5);
11492}
11493case ARM::BI__builtin_arm_mve_vstrhq_p_s32:
11494case ARM::BI__builtin_arm_mve_vstrhq_p_u32: {
11495 Value *Val0 = EmitScalarExpr(E->getArg(1));
11496 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 4);
11497 Value *Val2 = Builder.CreateTrunc(Val0, Val1);
11498 Address Val3 = EmitPointerWithAlignment(E->getArg(0));
11499 Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4)));
11500 Value *Val5 = llvm::ConstantInt::get(Int32Ty, 2);
11501 Value *Val6 = EmitScalarExpr(E->getArg(2));
11502 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11503 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
11504 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {llvm::FixedVectorType::get(Int16Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int16Ty, 4))}), {Val2, Val4, Val5, Val8});
11505}
11506case ARM::BI__builtin_arm_mve_vandq_m_f16:
11507case ARM::BI__builtin_arm_mve_vbicq_m_f16:
11508case ARM::BI__builtin_arm_mve_veorq_m_f16:
11509case ARM::BI__builtin_arm_mve_vornq_m_f16:
11510case ARM::BI__builtin_arm_mve_vorrq_m_f16: {
11511 Intrinsic::ID Param0;
11512 switch (BuiltinID) {
11513 case ARM::BI__builtin_arm_mve_vandq_m_f16:
11514 Param0 = Intrinsic::arm_mve_and_predicated;
11515 break;
11516 case ARM::BI__builtin_arm_mve_vbicq_m_f16:
11517 Param0 = Intrinsic::arm_mve_bic_predicated;
11518 break;
11519 case ARM::BI__builtin_arm_mve_veorq_m_f16:
11520 Param0 = Intrinsic::arm_mve_eor_predicated;
11521 break;
11522 case ARM::BI__builtin_arm_mve_vornq_m_f16:
11523 Param0 = Intrinsic::arm_mve_orn_predicated;
11524 break;
11525 case ARM::BI__builtin_arm_mve_vorrq_m_f16:
11526 Param0 = Intrinsic::arm_mve_orr_predicated;
11527 break;
11528 }
11529 Value *Val0 = EmitScalarExpr(E->getArg(1));
11530 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
11531 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
11532 Value *Val3 = EmitScalarExpr(E->getArg(2));
11533 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
11534 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
11535 Value *Val6 = EmitScalarExpr(E->getArg(3));
11536 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11537 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
11538 Value *Val9 = EmitScalarExpr(E->getArg(0));
11539 llvm::Type *Val10 = llvm::FixedVectorType::get(Int16Ty, 8);
11540 Value *Val11 = Builder.CreateBitCast(Val9, Val10);
11541 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val8, Val11});
11542 llvm::Type *Val13 = llvm::FixedVectorType::get(HalfTy, 8);
11543 return Builder.CreateBitCast(Val12, Val13);
11544}
11545case ARM::BI__builtin_arm_mve_vandq_m_s16:
11546case ARM::BI__builtin_arm_mve_vandq_m_u16:
11547case ARM::BI__builtin_arm_mve_vbicq_m_s16:
11548case ARM::BI__builtin_arm_mve_vbicq_m_u16:
11549case ARM::BI__builtin_arm_mve_veorq_m_s16:
11550case ARM::BI__builtin_arm_mve_veorq_m_u16:
11551case ARM::BI__builtin_arm_mve_vornq_m_s16:
11552case ARM::BI__builtin_arm_mve_vornq_m_u16:
11553case ARM::BI__builtin_arm_mve_vorrq_m_s16:
11554case ARM::BI__builtin_arm_mve_vorrq_m_u16: {
11555 Intrinsic::ID Param0;
11556 switch (BuiltinID) {
11557 case ARM::BI__builtin_arm_mve_vandq_m_s16:
11558 Param0 = Intrinsic::arm_mve_and_predicated;
11559 break;
11560 case ARM::BI__builtin_arm_mve_vandq_m_u16:
11561 Param0 = Intrinsic::arm_mve_and_predicated;
11562 break;
11563 case ARM::BI__builtin_arm_mve_vbicq_m_s16:
11564 Param0 = Intrinsic::arm_mve_bic_predicated;
11565 break;
11566 case ARM::BI__builtin_arm_mve_vbicq_m_u16:
11567 Param0 = Intrinsic::arm_mve_bic_predicated;
11568 break;
11569 case ARM::BI__builtin_arm_mve_veorq_m_s16:
11570 Param0 = Intrinsic::arm_mve_eor_predicated;
11571 break;
11572 case ARM::BI__builtin_arm_mve_veorq_m_u16:
11573 Param0 = Intrinsic::arm_mve_eor_predicated;
11574 break;
11575 case ARM::BI__builtin_arm_mve_vornq_m_s16:
11576 Param0 = Intrinsic::arm_mve_orn_predicated;
11577 break;
11578 case ARM::BI__builtin_arm_mve_vornq_m_u16:
11579 Param0 = Intrinsic::arm_mve_orn_predicated;
11580 break;
11581 case ARM::BI__builtin_arm_mve_vorrq_m_s16:
11582 Param0 = Intrinsic::arm_mve_orr_predicated;
11583 break;
11584 case ARM::BI__builtin_arm_mve_vorrq_m_u16:
11585 Param0 = Intrinsic::arm_mve_orr_predicated;
11586 break;
11587 }
11588 Value *Val0 = EmitScalarExpr(E->getArg(1));
11589 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
11590 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
11591 Value *Val3 = EmitScalarExpr(E->getArg(2));
11592 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
11593 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
11594 Value *Val6 = EmitScalarExpr(E->getArg(3));
11595 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11596 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
11597 Value *Val9 = EmitScalarExpr(E->getArg(0));
11598 llvm::Type *Val10 = llvm::FixedVectorType::get(Int16Ty, 8);
11599 Value *Val11 = Builder.CreateBitCast(Val9, Val10);
11600 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val8, Val11});
11601 llvm::Type *Val13 = llvm::FixedVectorType::get(Int16Ty, 8);
11602 return Builder.CreateBitCast(Val12, Val13);
11603}
11604case ARM::BI__builtin_arm_mve_vmaxaq_s16: {
11605 Value *Val0 = EmitScalarExpr(E->getArg(1));
11606 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
11607 Value *Val2 = llvm::Constant::getNullValue(Val1);
11608 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
11609 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
11610 Value *Val5 = llvm::Constant::getNullValue(Val4);
11611 Value *Val6 = Builder.CreateSub(Val5, Val0);
11612 Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
11613 Value *Val8 = EmitScalarExpr(E->getArg(0));
11614 Value *Val9 = Builder.CreateICmpUGE(Val8, Val7);
11615 return Builder.CreateSelect(Val9, Val8, Val7);
11616}
11617case ARM::BI__builtin_arm_mve_vminaq_s16: {
11618 Value *Val0 = EmitScalarExpr(E->getArg(1));
11619 llvm::Type *Val1 = llvm::FixedVectorType::get(Int16Ty, 8);
11620 Value *Val2 = llvm::Constant::getNullValue(Val1);
11621 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
11622 llvm::Type *Val4 = llvm::FixedVectorType::get(Int16Ty, 8);
11623 Value *Val5 = llvm::Constant::getNullValue(Val4);
11624 Value *Val6 = Builder.CreateSub(Val5, Val0);
11625 Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
11626 Value *Val8 = EmitScalarExpr(E->getArg(0));
11627 Value *Val9 = Builder.CreateICmpULE(Val8, Val7);
11628 return Builder.CreateSelect(Val9, Val8, Val7);
11629}
11630case ARM::BI__builtin_arm_mve_vandq_m_f32:
11631case ARM::BI__builtin_arm_mve_vbicq_m_f32:
11632case ARM::BI__builtin_arm_mve_veorq_m_f32:
11633case ARM::BI__builtin_arm_mve_vornq_m_f32:
11634case ARM::BI__builtin_arm_mve_vorrq_m_f32: {
11635 Intrinsic::ID Param0;
11636 switch (BuiltinID) {
11637 case ARM::BI__builtin_arm_mve_vandq_m_f32:
11638 Param0 = Intrinsic::arm_mve_and_predicated;
11639 break;
11640 case ARM::BI__builtin_arm_mve_vbicq_m_f32:
11641 Param0 = Intrinsic::arm_mve_bic_predicated;
11642 break;
11643 case ARM::BI__builtin_arm_mve_veorq_m_f32:
11644 Param0 = Intrinsic::arm_mve_eor_predicated;
11645 break;
11646 case ARM::BI__builtin_arm_mve_vornq_m_f32:
11647 Param0 = Intrinsic::arm_mve_orn_predicated;
11648 break;
11649 case ARM::BI__builtin_arm_mve_vorrq_m_f32:
11650 Param0 = Intrinsic::arm_mve_orr_predicated;
11651 break;
11652 }
11653 Value *Val0 = EmitScalarExpr(E->getArg(1));
11654 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
11655 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
11656 Value *Val3 = EmitScalarExpr(E->getArg(2));
11657 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
11658 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
11659 Value *Val6 = EmitScalarExpr(E->getArg(3));
11660 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11661 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
11662 Value *Val9 = EmitScalarExpr(E->getArg(0));
11663 llvm::Type *Val10 = llvm::FixedVectorType::get(Int32Ty, 4);
11664 Value *Val11 = Builder.CreateBitCast(Val9, Val10);
11665 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val8, Val11});
11666 llvm::Type *Val13 = llvm::FixedVectorType::get(FloatTy, 4);
11667 return Builder.CreateBitCast(Val12, Val13);
11668}
11669case ARM::BI__builtin_arm_mve_vandq_m_s32:
11670case ARM::BI__builtin_arm_mve_vandq_m_u32:
11671case ARM::BI__builtin_arm_mve_vbicq_m_s32:
11672case ARM::BI__builtin_arm_mve_vbicq_m_u32:
11673case ARM::BI__builtin_arm_mve_veorq_m_s32:
11674case ARM::BI__builtin_arm_mve_veorq_m_u32:
11675case ARM::BI__builtin_arm_mve_vornq_m_s32:
11676case ARM::BI__builtin_arm_mve_vornq_m_u32:
11677case ARM::BI__builtin_arm_mve_vorrq_m_s32:
11678case ARM::BI__builtin_arm_mve_vorrq_m_u32: {
11679 Intrinsic::ID Param0;
11680 switch (BuiltinID) {
11681 case ARM::BI__builtin_arm_mve_vandq_m_s32:
11682 Param0 = Intrinsic::arm_mve_and_predicated;
11683 break;
11684 case ARM::BI__builtin_arm_mve_vandq_m_u32:
11685 Param0 = Intrinsic::arm_mve_and_predicated;
11686 break;
11687 case ARM::BI__builtin_arm_mve_vbicq_m_s32:
11688 Param0 = Intrinsic::arm_mve_bic_predicated;
11689 break;
11690 case ARM::BI__builtin_arm_mve_vbicq_m_u32:
11691 Param0 = Intrinsic::arm_mve_bic_predicated;
11692 break;
11693 case ARM::BI__builtin_arm_mve_veorq_m_s32:
11694 Param0 = Intrinsic::arm_mve_eor_predicated;
11695 break;
11696 case ARM::BI__builtin_arm_mve_veorq_m_u32:
11697 Param0 = Intrinsic::arm_mve_eor_predicated;
11698 break;
11699 case ARM::BI__builtin_arm_mve_vornq_m_s32:
11700 Param0 = Intrinsic::arm_mve_orn_predicated;
11701 break;
11702 case ARM::BI__builtin_arm_mve_vornq_m_u32:
11703 Param0 = Intrinsic::arm_mve_orn_predicated;
11704 break;
11705 case ARM::BI__builtin_arm_mve_vorrq_m_s32:
11706 Param0 = Intrinsic::arm_mve_orr_predicated;
11707 break;
11708 case ARM::BI__builtin_arm_mve_vorrq_m_u32:
11709 Param0 = Intrinsic::arm_mve_orr_predicated;
11710 break;
11711 }
11712 Value *Val0 = EmitScalarExpr(E->getArg(1));
11713 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
11714 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
11715 Value *Val3 = EmitScalarExpr(E->getArg(2));
11716 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
11717 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
11718 Value *Val6 = EmitScalarExpr(E->getArg(3));
11719 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11720 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
11721 Value *Val9 = EmitScalarExpr(E->getArg(0));
11722 llvm::Type *Val10 = llvm::FixedVectorType::get(Int32Ty, 4);
11723 Value *Val11 = Builder.CreateBitCast(Val9, Val10);
11724 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val8, Val11});
11725 llvm::Type *Val13 = llvm::FixedVectorType::get(Int32Ty, 4);
11726 return Builder.CreateBitCast(Val12, Val13);
11727}
11728case ARM::BI__builtin_arm_mve_vmaxaq_s32: {
11729 Value *Val0 = EmitScalarExpr(E->getArg(1));
11730 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
11731 Value *Val2 = llvm::Constant::getNullValue(Val1);
11732 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
11733 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
11734 Value *Val5 = llvm::Constant::getNullValue(Val4);
11735 Value *Val6 = Builder.CreateSub(Val5, Val0);
11736 Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
11737 Value *Val8 = EmitScalarExpr(E->getArg(0));
11738 Value *Val9 = Builder.CreateICmpUGE(Val8, Val7);
11739 return Builder.CreateSelect(Val9, Val8, Val7);
11740}
11741case ARM::BI__builtin_arm_mve_vminaq_s32: {
11742 Value *Val0 = EmitScalarExpr(E->getArg(1));
11743 llvm::Type *Val1 = llvm::FixedVectorType::get(Int32Ty, 4);
11744 Value *Val2 = llvm::Constant::getNullValue(Val1);
11745 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
11746 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
11747 Value *Val5 = llvm::Constant::getNullValue(Val4);
11748 Value *Val6 = Builder.CreateSub(Val5, Val0);
11749 Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
11750 Value *Val8 = EmitScalarExpr(E->getArg(0));
11751 Value *Val9 = Builder.CreateICmpULE(Val8, Val7);
11752 return Builder.CreateSelect(Val9, Val8, Val7);
11753}
11754case ARM::BI__builtin_arm_mve_vandq_m_s8:
11755case ARM::BI__builtin_arm_mve_vandq_m_u8:
11756case ARM::BI__builtin_arm_mve_vbicq_m_s8:
11757case ARM::BI__builtin_arm_mve_vbicq_m_u8:
11758case ARM::BI__builtin_arm_mve_veorq_m_s8:
11759case ARM::BI__builtin_arm_mve_veorq_m_u8:
11760case ARM::BI__builtin_arm_mve_vornq_m_s8:
11761case ARM::BI__builtin_arm_mve_vornq_m_u8:
11762case ARM::BI__builtin_arm_mve_vorrq_m_s8:
11763case ARM::BI__builtin_arm_mve_vorrq_m_u8: {
11764 Intrinsic::ID Param0;
11765 switch (BuiltinID) {
11766 case ARM::BI__builtin_arm_mve_vandq_m_s8:
11767 Param0 = Intrinsic::arm_mve_and_predicated;
11768 break;
11769 case ARM::BI__builtin_arm_mve_vandq_m_u8:
11770 Param0 = Intrinsic::arm_mve_and_predicated;
11771 break;
11772 case ARM::BI__builtin_arm_mve_vbicq_m_s8:
11773 Param0 = Intrinsic::arm_mve_bic_predicated;
11774 break;
11775 case ARM::BI__builtin_arm_mve_vbicq_m_u8:
11776 Param0 = Intrinsic::arm_mve_bic_predicated;
11777 break;
11778 case ARM::BI__builtin_arm_mve_veorq_m_s8:
11779 Param0 = Intrinsic::arm_mve_eor_predicated;
11780 break;
11781 case ARM::BI__builtin_arm_mve_veorq_m_u8:
11782 Param0 = Intrinsic::arm_mve_eor_predicated;
11783 break;
11784 case ARM::BI__builtin_arm_mve_vornq_m_s8:
11785 Param0 = Intrinsic::arm_mve_orn_predicated;
11786 break;
11787 case ARM::BI__builtin_arm_mve_vornq_m_u8:
11788 Param0 = Intrinsic::arm_mve_orn_predicated;
11789 break;
11790 case ARM::BI__builtin_arm_mve_vorrq_m_s8:
11791 Param0 = Intrinsic::arm_mve_orr_predicated;
11792 break;
11793 case ARM::BI__builtin_arm_mve_vorrq_m_u8:
11794 Param0 = Intrinsic::arm_mve_orr_predicated;
11795 break;
11796 }
11797 Value *Val0 = EmitScalarExpr(E->getArg(1));
11798 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
11799 Value *Val2 = Builder.CreateBitCast(Val0, Val1);
11800 Value *Val3 = EmitScalarExpr(E->getArg(2));
11801 llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
11802 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
11803 Value *Val6 = EmitScalarExpr(E->getArg(3));
11804 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11805 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
11806 Value *Val9 = EmitScalarExpr(E->getArg(0));
11807 llvm::Type *Val10 = llvm::FixedVectorType::get(Int8Ty, 16);
11808 Value *Val11 = Builder.CreateBitCast(Val9, Val10);
11809 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val5, Val8, Val11});
11810 llvm::Type *Val13 = llvm::FixedVectorType::get(Int8Ty, 16);
11811 return Builder.CreateBitCast(Val12, Val13);
11812}
11813case ARM::BI__builtin_arm_mve_vmaxaq_s8: {
11814 Value *Val0 = EmitScalarExpr(E->getArg(1));
11815 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
11816 Value *Val2 = llvm::Constant::getNullValue(Val1);
11817 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
11818 llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
11819 Value *Val5 = llvm::Constant::getNullValue(Val4);
11820 Value *Val6 = Builder.CreateSub(Val5, Val0);
11821 Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
11822 Value *Val8 = EmitScalarExpr(E->getArg(0));
11823 Value *Val9 = Builder.CreateICmpUGE(Val8, Val7);
11824 return Builder.CreateSelect(Val9, Val8, Val7);
11825}
11826case ARM::BI__builtin_arm_mve_vminaq_s8: {
11827 Value *Val0 = EmitScalarExpr(E->getArg(1));
11828 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 16);
11829 Value *Val2 = llvm::Constant::getNullValue(Val1);
11830 Value *Val3 = Builder.CreateICmpSLT(Val0, Val2);
11831 llvm::Type *Val4 = llvm::FixedVectorType::get(Int8Ty, 16);
11832 Value *Val5 = llvm::Constant::getNullValue(Val4);
11833 Value *Val6 = Builder.CreateSub(Val5, Val0);
11834 Value *Val7 = Builder.CreateSelect(Val3, Val6, Val0);
11835 Value *Val8 = EmitScalarExpr(E->getArg(0));
11836 Value *Val9 = Builder.CreateICmpULE(Val8, Val7);
11837 return Builder.CreateSelect(Val9, Val8, Val7);
11838}
11839case ARM::BI__builtin_arm_mve_vstrbq_s32:
11840case ARM::BI__builtin_arm_mve_vstrbq_u32: {
11841 Value *Val0 = EmitScalarExpr(E->getArg(1));
11842 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 4);
11843 Value *Val2 = Builder.CreateTrunc(Val0, Val1);
11844 Address Val3 = EmitPointerWithAlignment(E->getArg(0));
11845 Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
11846 Address Val5 = Address(Val4, CharUnits::fromQuantity(1));
11847 return Builder.CreateStore(Val2, Val5);
11848}
11849case ARM::BI__builtin_arm_mve_vstrbq_p_s32:
11850case ARM::BI__builtin_arm_mve_vstrbq_p_u32: {
11851 Value *Val0 = EmitScalarExpr(E->getArg(1));
11852 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 4);
11853 Value *Val2 = Builder.CreateTrunc(Val0, Val1);
11854 Address Val3 = EmitPointerWithAlignment(E->getArg(0));
11855 Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4)));
11856 Value *Val5 = llvm::ConstantInt::get(Int32Ty, 1);
11857 Value *Val6 = EmitScalarExpr(E->getArg(2));
11858 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11859 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
11860 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {llvm::FixedVectorType::get(Int8Ty, 4), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 4))}), {Val2, Val4, Val5, Val8});
11861}
11862case ARM::BI__builtin_arm_mve_vstrbq_s16:
11863case ARM::BI__builtin_arm_mve_vstrbq_u16: {
11864 Value *Val0 = EmitScalarExpr(E->getArg(1));
11865 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 8);
11866 Value *Val2 = Builder.CreateTrunc(Val0, Val1);
11867 Address Val3 = EmitPointerWithAlignment(E->getArg(0));
11868 Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
11869 Address Val5 = Address(Val4, CharUnits::fromQuantity(1));
11870 return Builder.CreateStore(Val2, Val5);
11871}
11872case ARM::BI__builtin_arm_mve_vstrbq_p_s16:
11873case ARM::BI__builtin_arm_mve_vstrbq_p_u16: {
11874 Value *Val0 = EmitScalarExpr(E->getArg(1));
11875 llvm::Type *Val1 = llvm::FixedVectorType::get(Int8Ty, 8);
11876 Value *Val2 = Builder.CreateTrunc(Val0, Val1);
11877 Address Val3 = EmitPointerWithAlignment(E->getArg(0));
11878 Value *Val4 = Builder.CreatePointerCast((Val3.getPointer()), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8)));
11879 Value *Val5 = llvm::ConstantInt::get(Int32Ty, 1);
11880 Value *Val6 = EmitScalarExpr(E->getArg(2));
11881 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
11882 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
11883 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::masked_store, {llvm::FixedVectorType::get(Int8Ty, 8), llvm::PointerType::getUnqual(llvm::FixedVectorType::get(Int8Ty, 8))}), {Val2, Val4, Val5, Val8});
11884}
11885case ARM::BI__builtin_arm_mve_vfmasq_m_n_f16:
11886case ARM::BI__builtin_arm_mve_vfmasq_m_n_f32: {
11887 llvm::Type * Param0;
11888 llvm::Type * Param1;
11889 switch (BuiltinID) {
11890 case ARM::BI__builtin_arm_mve_vfmasq_m_n_f16:
11891 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11892 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
11893 break;
11894 case ARM::BI__builtin_arm_mve_vfmasq_m_n_f32:
11895 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11896 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
11897 break;
11898 }
11899 Value *Val0 = EmitScalarExpr(E->getArg(2));
11900 Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
11901 Value *Val2 = EmitScalarExpr(E->getArg(0));
11902 Value *Val3 = EmitScalarExpr(E->getArg(1));
11903 Value *Val4 = (Val3);
11904 Value *Val5 = EmitScalarExpr(E->getArg(3));
11905 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
11906 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
11907 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val2, Val4, Val1, Val7});
11908}
11909case ARM::BI__builtin_arm_mve_vfmasq_n_f16:
11910case ARM::BI__builtin_arm_mve_vfmasq_n_f32: {
11911 llvm::Type * Param0;
11912 switch (BuiltinID) {
11913 case ARM::BI__builtin_arm_mve_vfmasq_n_f16:
11914 Param0 = llvm::FixedVectorType::get(HalfTy, 8);
11915 break;
11916 case ARM::BI__builtin_arm_mve_vfmasq_n_f32:
11917 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
11918 break;
11919 }
11920 Value *Val0 = EmitScalarExpr(E->getArg(2));
11921 Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
11922 Value *Val2 = EmitScalarExpr(E->getArg(0));
11923 Value *Val3 = EmitScalarExpr(E->getArg(1));
11924 Value *Val4 = (Val3);
11925 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val2, Val4, Val1});
11926}
11927case ARM::BI__builtin_arm_mve_vfmaq_m_n_f16:
11928case ARM::BI__builtin_arm_mve_vfmaq_m_n_f32: {
11929 llvm::Type * Param0;
11930 llvm::Type * Param1;
11931 switch (BuiltinID) {
11932 case ARM::BI__builtin_arm_mve_vfmaq_m_n_f16:
11933 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11934 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
11935 break;
11936 case ARM::BI__builtin_arm_mve_vfmaq_m_n_f32:
11937 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11938 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
11939 break;
11940 }
11941 Value *Val0 = EmitScalarExpr(E->getArg(2));
11942 Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
11943 Value *Val2 = EmitScalarExpr(E->getArg(1));
11944 Value *Val3 = (Val1);
11945 Value *Val4 = EmitScalarExpr(E->getArg(0));
11946 Value *Val5 = EmitScalarExpr(E->getArg(3));
11947 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
11948 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val6});
11949 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_fma_predicated, {Param1, Param0}), {Val2, Val3, Val4, Val7});
11950}
11951case ARM::BI__builtin_arm_mve_vfmaq_n_f16:
11952case ARM::BI__builtin_arm_mve_vfmaq_n_f32: {
11953 llvm::Type * Param0;
11954 switch (BuiltinID) {
11955 case ARM::BI__builtin_arm_mve_vfmaq_n_f16:
11956 Param0 = llvm::FixedVectorType::get(HalfTy, 8);
11957 break;
11958 case ARM::BI__builtin_arm_mve_vfmaq_n_f32:
11959 Param0 = llvm::FixedVectorType::get(FloatTy, 4);
11960 break;
11961 }
11962 Value *Val0 = EmitScalarExpr(E->getArg(2));
11963 Value *Val1 = ARMMVEVectorSplat(Builder, Val0);
11964 Value *Val2 = EmitScalarExpr(E->getArg(1));
11965 Value *Val3 = (Val1);
11966 Value *Val4 = EmitScalarExpr(E->getArg(0));
11967 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::fma, {Param0}), {Val2, Val3, Val4});
11968}
11969case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f16:
11970case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f32: {
11971 llvm::Type * Param0;
11972 switch (BuiltinID) {
11973 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f16:
11974 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11975 break;
11976 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_f32:
11977 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
11978 break;
11979 }
11980 Value *Val0 = EmitScalarExpr(E->getArg(2));
11981 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
11982 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
11983 Value *Val3 = EmitScalarExpr(E->getArg(0));
11984 Value *Val4 = EmitScalarExpr(E->getArg(1));
11985 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
11986 Value *Val6 = Builder.CreateFCmpOEQ(Val3, Val5);
11987 Value *Val7 = Builder.CreateAnd(Val2, Val6);
11988 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
11989 return Builder.CreateIntCast(Val8, Int16Ty, false);
11990}
11991case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f16:
11992case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f32: {
11993 llvm::Type * Param0;
11994 switch (BuiltinID) {
11995 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f16:
11996 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
11997 break;
11998 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_f32:
11999 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12000 break;
12001 }
12002 Value *Val0 = EmitScalarExpr(E->getArg(2));
12003 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12004 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12005 Value *Val3 = EmitScalarExpr(E->getArg(0));
12006 Value *Val4 = EmitScalarExpr(E->getArg(1));
12007 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12008 Value *Val6 = Builder.CreateFCmpOGE(Val3, Val5);
12009 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12010 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12011 return Builder.CreateIntCast(Val8, Int16Ty, false);
12012}
12013case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f16:
12014case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f32: {
12015 llvm::Type * Param0;
12016 switch (BuiltinID) {
12017 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f16:
12018 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12019 break;
12020 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_f32:
12021 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12022 break;
12023 }
12024 Value *Val0 = EmitScalarExpr(E->getArg(2));
12025 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12026 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12027 Value *Val3 = EmitScalarExpr(E->getArg(0));
12028 Value *Val4 = EmitScalarExpr(E->getArg(1));
12029 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12030 Value *Val6 = Builder.CreateFCmpOGT(Val3, Val5);
12031 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12032 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12033 return Builder.CreateIntCast(Val8, Int16Ty, false);
12034}
12035case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f16:
12036case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f32: {
12037 llvm::Type * Param0;
12038 switch (BuiltinID) {
12039 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f16:
12040 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12041 break;
12042 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_f32:
12043 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12044 break;
12045 }
12046 Value *Val0 = EmitScalarExpr(E->getArg(2));
12047 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12048 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12049 Value *Val3 = EmitScalarExpr(E->getArg(0));
12050 Value *Val4 = EmitScalarExpr(E->getArg(1));
12051 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12052 Value *Val6 = Builder.CreateFCmpOLE(Val3, Val5);
12053 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12054 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12055 return Builder.CreateIntCast(Val8, Int16Ty, false);
12056}
12057case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f16:
12058case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f32: {
12059 llvm::Type * Param0;
12060 switch (BuiltinID) {
12061 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f16:
12062 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12063 break;
12064 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_f32:
12065 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12066 break;
12067 }
12068 Value *Val0 = EmitScalarExpr(E->getArg(2));
12069 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12070 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12071 Value *Val3 = EmitScalarExpr(E->getArg(0));
12072 Value *Val4 = EmitScalarExpr(E->getArg(1));
12073 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12074 Value *Val6 = Builder.CreateFCmpOLT(Val3, Val5);
12075 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12076 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12077 return Builder.CreateIntCast(Val8, Int16Ty, false);
12078}
12079case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f16:
12080case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f32: {
12081 llvm::Type * Param0;
12082 switch (BuiltinID) {
12083 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f16:
12084 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12085 break;
12086 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_f32:
12087 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12088 break;
12089 }
12090 Value *Val0 = EmitScalarExpr(E->getArg(2));
12091 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12092 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12093 Value *Val3 = EmitScalarExpr(E->getArg(0));
12094 Value *Val4 = EmitScalarExpr(E->getArg(1));
12095 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12096 Value *Val6 = Builder.CreateFCmpUNE(Val3, Val5);
12097 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12098 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12099 return Builder.CreateIntCast(Val8, Int16Ty, false);
12100}
12101case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s16:
12102case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s32:
12103case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s8:
12104case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u16:
12105case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u32:
12106case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u8: {
12107 llvm::Type * Param0;
12108 switch (BuiltinID) {
12109 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s16:
12110 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12111 break;
12112 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s32:
12113 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12114 break;
12115 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_s8:
12116 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12117 break;
12118 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u16:
12119 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12120 break;
12121 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u32:
12122 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12123 break;
12124 case ARM::BI__builtin_arm_mve_vcmpeqq_m_n_u8:
12125 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12126 break;
12127 }
12128 Value *Val0 = EmitScalarExpr(E->getArg(2));
12129 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12130 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12131 Value *Val3 = EmitScalarExpr(E->getArg(0));
12132 Value *Val4 = EmitScalarExpr(E->getArg(1));
12133 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12134 Value *Val6 = Builder.CreateICmpEQ(Val3, Val5);
12135 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12136 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12137 return Builder.CreateIntCast(Val8, Int16Ty, false);
12138}
12139case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s16:
12140case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s32:
12141case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s8:
12142case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u16:
12143case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u32:
12144case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u8: {
12145 llvm::Type * Param0;
12146 switch (BuiltinID) {
12147 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s16:
12148 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12149 break;
12150 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s32:
12151 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12152 break;
12153 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_s8:
12154 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12155 break;
12156 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u16:
12157 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12158 break;
12159 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u32:
12160 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12161 break;
12162 case ARM::BI__builtin_arm_mve_vcmpneq_m_n_u8:
12163 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12164 break;
12165 }
12166 Value *Val0 = EmitScalarExpr(E->getArg(2));
12167 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12168 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12169 Value *Val3 = EmitScalarExpr(E->getArg(0));
12170 Value *Val4 = EmitScalarExpr(E->getArg(1));
12171 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12172 Value *Val6 = Builder.CreateICmpNE(Val3, Val5);
12173 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12174 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12175 return Builder.CreateIntCast(Val8, Int16Ty, false);
12176}
12177case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s16:
12178case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s32:
12179case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s8: {
12180 llvm::Type * Param0;
12181 switch (BuiltinID) {
12182 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s16:
12183 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12184 break;
12185 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s32:
12186 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12187 break;
12188 case ARM::BI__builtin_arm_mve_vcmpgeq_m_n_s8:
12189 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12190 break;
12191 }
12192 Value *Val0 = EmitScalarExpr(E->getArg(2));
12193 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12194 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12195 Value *Val3 = EmitScalarExpr(E->getArg(0));
12196 Value *Val4 = EmitScalarExpr(E->getArg(1));
12197 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12198 Value *Val6 = Builder.CreateICmpSGE(Val3, Val5);
12199 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12200 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12201 return Builder.CreateIntCast(Val8, Int16Ty, false);
12202}
12203case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s16:
12204case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s32:
12205case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s8: {
12206 llvm::Type * Param0;
12207 switch (BuiltinID) {
12208 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s16:
12209 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12210 break;
12211 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s32:
12212 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12213 break;
12214 case ARM::BI__builtin_arm_mve_vcmpgtq_m_n_s8:
12215 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12216 break;
12217 }
12218 Value *Val0 = EmitScalarExpr(E->getArg(2));
12219 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12220 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12221 Value *Val3 = EmitScalarExpr(E->getArg(0));
12222 Value *Val4 = EmitScalarExpr(E->getArg(1));
12223 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12224 Value *Val6 = Builder.CreateICmpSGT(Val3, Val5);
12225 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12226 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12227 return Builder.CreateIntCast(Val8, Int16Ty, false);
12228}
12229case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s16:
12230case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s32:
12231case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s8: {
12232 llvm::Type * Param0;
12233 switch (BuiltinID) {
12234 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s16:
12235 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12236 break;
12237 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s32:
12238 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12239 break;
12240 case ARM::BI__builtin_arm_mve_vcmpleq_m_n_s8:
12241 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12242 break;
12243 }
12244 Value *Val0 = EmitScalarExpr(E->getArg(2));
12245 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12246 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12247 Value *Val3 = EmitScalarExpr(E->getArg(0));
12248 Value *Val4 = EmitScalarExpr(E->getArg(1));
12249 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12250 Value *Val6 = Builder.CreateICmpSLE(Val3, Val5);
12251 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12252 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12253 return Builder.CreateIntCast(Val8, Int16Ty, false);
12254}
12255case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s16:
12256case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s32:
12257case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s8: {
12258 llvm::Type * Param0;
12259 switch (BuiltinID) {
12260 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s16:
12261 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12262 break;
12263 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s32:
12264 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12265 break;
12266 case ARM::BI__builtin_arm_mve_vcmpltq_m_n_s8:
12267 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12268 break;
12269 }
12270 Value *Val0 = EmitScalarExpr(E->getArg(2));
12271 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12272 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12273 Value *Val3 = EmitScalarExpr(E->getArg(0));
12274 Value *Val4 = EmitScalarExpr(E->getArg(1));
12275 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12276 Value *Val6 = Builder.CreateICmpSLT(Val3, Val5);
12277 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12278 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12279 return Builder.CreateIntCast(Val8, Int16Ty, false);
12280}
12281case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u16:
12282case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u32:
12283case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u8: {
12284 llvm::Type * Param0;
12285 switch (BuiltinID) {
12286 case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u16:
12287 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12288 break;
12289 case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u32:
12290 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12291 break;
12292 case ARM::BI__builtin_arm_mve_vcmpcsq_m_n_u8:
12293 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12294 break;
12295 }
12296 Value *Val0 = EmitScalarExpr(E->getArg(2));
12297 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12298 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12299 Value *Val3 = EmitScalarExpr(E->getArg(0));
12300 Value *Val4 = EmitScalarExpr(E->getArg(1));
12301 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12302 Value *Val6 = Builder.CreateICmpUGE(Val3, Val5);
12303 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12304 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12305 return Builder.CreateIntCast(Val8, Int16Ty, false);
12306}
12307case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u16:
12308case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u32:
12309case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u8: {
12310 llvm::Type * Param0;
12311 switch (BuiltinID) {
12312 case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u16:
12313 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12314 break;
12315 case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u32:
12316 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12317 break;
12318 case ARM::BI__builtin_arm_mve_vcmphiq_m_n_u8:
12319 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12320 break;
12321 }
12322 Value *Val0 = EmitScalarExpr(E->getArg(2));
12323 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12324 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12325 Value *Val3 = EmitScalarExpr(E->getArg(0));
12326 Value *Val4 = EmitScalarExpr(E->getArg(1));
12327 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12328 Value *Val6 = Builder.CreateICmpUGT(Val3, Val5);
12329 Value *Val7 = Builder.CreateAnd(Val2, Val6);
12330 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val7});
12331 return Builder.CreateIntCast(Val8, Int16Ty, false);
12332}
12333case ARM::BI__builtin_arm_mve_vcmpeqq_m_f16:
12334case ARM::BI__builtin_arm_mve_vcmpeqq_m_f32: {
12335 llvm::Type * Param0;
12336 switch (BuiltinID) {
12337 case ARM::BI__builtin_arm_mve_vcmpeqq_m_f16:
12338 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12339 break;
12340 case ARM::BI__builtin_arm_mve_vcmpeqq_m_f32:
12341 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12342 break;
12343 }
12344 Value *Val0 = EmitScalarExpr(E->getArg(2));
12345 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12346 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12347 Value *Val3 = EmitScalarExpr(E->getArg(0));
12348 Value *Val4 = EmitScalarExpr(E->getArg(1));
12349 Value *Val5 = Builder.CreateFCmpOEQ(Val3, Val4);
12350 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12351 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12352 return Builder.CreateIntCast(Val7, Int16Ty, false);
12353}
12354case ARM::BI__builtin_arm_mve_vcmpgeq_m_f16:
12355case ARM::BI__builtin_arm_mve_vcmpgeq_m_f32: {
12356 llvm::Type * Param0;
12357 switch (BuiltinID) {
12358 case ARM::BI__builtin_arm_mve_vcmpgeq_m_f16:
12359 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12360 break;
12361 case ARM::BI__builtin_arm_mve_vcmpgeq_m_f32:
12362 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12363 break;
12364 }
12365 Value *Val0 = EmitScalarExpr(E->getArg(2));
12366 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12367 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12368 Value *Val3 = EmitScalarExpr(E->getArg(0));
12369 Value *Val4 = EmitScalarExpr(E->getArg(1));
12370 Value *Val5 = Builder.CreateFCmpOGE(Val3, Val4);
12371 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12372 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12373 return Builder.CreateIntCast(Val7, Int16Ty, false);
12374}
12375case ARM::BI__builtin_arm_mve_vcmpgtq_m_f16:
12376case ARM::BI__builtin_arm_mve_vcmpgtq_m_f32: {
12377 llvm::Type * Param0;
12378 switch (BuiltinID) {
12379 case ARM::BI__builtin_arm_mve_vcmpgtq_m_f16:
12380 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12381 break;
12382 case ARM::BI__builtin_arm_mve_vcmpgtq_m_f32:
12383 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12384 break;
12385 }
12386 Value *Val0 = EmitScalarExpr(E->getArg(2));
12387 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12388 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12389 Value *Val3 = EmitScalarExpr(E->getArg(0));
12390 Value *Val4 = EmitScalarExpr(E->getArg(1));
12391 Value *Val5 = Builder.CreateFCmpOGT(Val3, Val4);
12392 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12393 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12394 return Builder.CreateIntCast(Val7, Int16Ty, false);
12395}
12396case ARM::BI__builtin_arm_mve_vcmpleq_m_f16:
12397case ARM::BI__builtin_arm_mve_vcmpleq_m_f32: {
12398 llvm::Type * Param0;
12399 switch (BuiltinID) {
12400 case ARM::BI__builtin_arm_mve_vcmpleq_m_f16:
12401 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12402 break;
12403 case ARM::BI__builtin_arm_mve_vcmpleq_m_f32:
12404 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12405 break;
12406 }
12407 Value *Val0 = EmitScalarExpr(E->getArg(2));
12408 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12409 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12410 Value *Val3 = EmitScalarExpr(E->getArg(0));
12411 Value *Val4 = EmitScalarExpr(E->getArg(1));
12412 Value *Val5 = Builder.CreateFCmpOLE(Val3, Val4);
12413 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12414 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12415 return Builder.CreateIntCast(Val7, Int16Ty, false);
12416}
12417case ARM::BI__builtin_arm_mve_vcmpltq_m_f16:
12418case ARM::BI__builtin_arm_mve_vcmpltq_m_f32: {
12419 llvm::Type * Param0;
12420 switch (BuiltinID) {
12421 case ARM::BI__builtin_arm_mve_vcmpltq_m_f16:
12422 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12423 break;
12424 case ARM::BI__builtin_arm_mve_vcmpltq_m_f32:
12425 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12426 break;
12427 }
12428 Value *Val0 = EmitScalarExpr(E->getArg(2));
12429 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12430 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12431 Value *Val3 = EmitScalarExpr(E->getArg(0));
12432 Value *Val4 = EmitScalarExpr(E->getArg(1));
12433 Value *Val5 = Builder.CreateFCmpOLT(Val3, Val4);
12434 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12435 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12436 return Builder.CreateIntCast(Val7, Int16Ty, false);
12437}
12438case ARM::BI__builtin_arm_mve_vcmpneq_m_f16:
12439case ARM::BI__builtin_arm_mve_vcmpneq_m_f32: {
12440 llvm::Type * Param0;
12441 switch (BuiltinID) {
12442 case ARM::BI__builtin_arm_mve_vcmpneq_m_f16:
12443 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12444 break;
12445 case ARM::BI__builtin_arm_mve_vcmpneq_m_f32:
12446 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12447 break;
12448 }
12449 Value *Val0 = EmitScalarExpr(E->getArg(2));
12450 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12451 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12452 Value *Val3 = EmitScalarExpr(E->getArg(0));
12453 Value *Val4 = EmitScalarExpr(E->getArg(1));
12454 Value *Val5 = Builder.CreateFCmpUNE(Val3, Val4);
12455 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12456 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12457 return Builder.CreateIntCast(Val7, Int16Ty, false);
12458}
12459case ARM::BI__builtin_arm_mve_vcmpeqq_m_s16:
12460case ARM::BI__builtin_arm_mve_vcmpeqq_m_s32:
12461case ARM::BI__builtin_arm_mve_vcmpeqq_m_s8:
12462case ARM::BI__builtin_arm_mve_vcmpeqq_m_u16:
12463case ARM::BI__builtin_arm_mve_vcmpeqq_m_u32:
12464case ARM::BI__builtin_arm_mve_vcmpeqq_m_u8: {
12465 llvm::Type * Param0;
12466 switch (BuiltinID) {
12467 case ARM::BI__builtin_arm_mve_vcmpeqq_m_s16:
12468 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12469 break;
12470 case ARM::BI__builtin_arm_mve_vcmpeqq_m_s32:
12471 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12472 break;
12473 case ARM::BI__builtin_arm_mve_vcmpeqq_m_s8:
12474 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12475 break;
12476 case ARM::BI__builtin_arm_mve_vcmpeqq_m_u16:
12477 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12478 break;
12479 case ARM::BI__builtin_arm_mve_vcmpeqq_m_u32:
12480 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12481 break;
12482 case ARM::BI__builtin_arm_mve_vcmpeqq_m_u8:
12483 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12484 break;
12485 }
12486 Value *Val0 = EmitScalarExpr(E->getArg(2));
12487 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12488 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12489 Value *Val3 = EmitScalarExpr(E->getArg(0));
12490 Value *Val4 = EmitScalarExpr(E->getArg(1));
12491 Value *Val5 = Builder.CreateICmpEQ(Val3, Val4);
12492 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12493 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12494 return Builder.CreateIntCast(Val7, Int16Ty, false);
12495}
12496case ARM::BI__builtin_arm_mve_vcmpneq_m_s16:
12497case ARM::BI__builtin_arm_mve_vcmpneq_m_s32:
12498case ARM::BI__builtin_arm_mve_vcmpneq_m_s8:
12499case ARM::BI__builtin_arm_mve_vcmpneq_m_u16:
12500case ARM::BI__builtin_arm_mve_vcmpneq_m_u32:
12501case ARM::BI__builtin_arm_mve_vcmpneq_m_u8: {
12502 llvm::Type * Param0;
12503 switch (BuiltinID) {
12504 case ARM::BI__builtin_arm_mve_vcmpneq_m_s16:
12505 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12506 break;
12507 case ARM::BI__builtin_arm_mve_vcmpneq_m_s32:
12508 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12509 break;
12510 case ARM::BI__builtin_arm_mve_vcmpneq_m_s8:
12511 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12512 break;
12513 case ARM::BI__builtin_arm_mve_vcmpneq_m_u16:
12514 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12515 break;
12516 case ARM::BI__builtin_arm_mve_vcmpneq_m_u32:
12517 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12518 break;
12519 case ARM::BI__builtin_arm_mve_vcmpneq_m_u8:
12520 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12521 break;
12522 }
12523 Value *Val0 = EmitScalarExpr(E->getArg(2));
12524 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12525 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12526 Value *Val3 = EmitScalarExpr(E->getArg(0));
12527 Value *Val4 = EmitScalarExpr(E->getArg(1));
12528 Value *Val5 = Builder.CreateICmpNE(Val3, Val4);
12529 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12530 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12531 return Builder.CreateIntCast(Val7, Int16Ty, false);
12532}
12533case ARM::BI__builtin_arm_mve_vcmpgeq_m_s16:
12534case ARM::BI__builtin_arm_mve_vcmpgeq_m_s32:
12535case ARM::BI__builtin_arm_mve_vcmpgeq_m_s8: {
12536 llvm::Type * Param0;
12537 switch (BuiltinID) {
12538 case ARM::BI__builtin_arm_mve_vcmpgeq_m_s16:
12539 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12540 break;
12541 case ARM::BI__builtin_arm_mve_vcmpgeq_m_s32:
12542 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12543 break;
12544 case ARM::BI__builtin_arm_mve_vcmpgeq_m_s8:
12545 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12546 break;
12547 }
12548 Value *Val0 = EmitScalarExpr(E->getArg(2));
12549 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12550 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12551 Value *Val3 = EmitScalarExpr(E->getArg(0));
12552 Value *Val4 = EmitScalarExpr(E->getArg(1));
12553 Value *Val5 = Builder.CreateICmpSGE(Val3, Val4);
12554 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12555 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12556 return Builder.CreateIntCast(Val7, Int16Ty, false);
12557}
12558case ARM::BI__builtin_arm_mve_vcmpgtq_m_s16:
12559case ARM::BI__builtin_arm_mve_vcmpgtq_m_s32:
12560case ARM::BI__builtin_arm_mve_vcmpgtq_m_s8: {
12561 llvm::Type * Param0;
12562 switch (BuiltinID) {
12563 case ARM::BI__builtin_arm_mve_vcmpgtq_m_s16:
12564 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12565 break;
12566 case ARM::BI__builtin_arm_mve_vcmpgtq_m_s32:
12567 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12568 break;
12569 case ARM::BI__builtin_arm_mve_vcmpgtq_m_s8:
12570 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12571 break;
12572 }
12573 Value *Val0 = EmitScalarExpr(E->getArg(2));
12574 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12575 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12576 Value *Val3 = EmitScalarExpr(E->getArg(0));
12577 Value *Val4 = EmitScalarExpr(E->getArg(1));
12578 Value *Val5 = Builder.CreateICmpSGT(Val3, Val4);
12579 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12580 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12581 return Builder.CreateIntCast(Val7, Int16Ty, false);
12582}
12583case ARM::BI__builtin_arm_mve_vcmpleq_m_s16:
12584case ARM::BI__builtin_arm_mve_vcmpleq_m_s32:
12585case ARM::BI__builtin_arm_mve_vcmpleq_m_s8: {
12586 llvm::Type * Param0;
12587 switch (BuiltinID) {
12588 case ARM::BI__builtin_arm_mve_vcmpleq_m_s16:
12589 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12590 break;
12591 case ARM::BI__builtin_arm_mve_vcmpleq_m_s32:
12592 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12593 break;
12594 case ARM::BI__builtin_arm_mve_vcmpleq_m_s8:
12595 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12596 break;
12597 }
12598 Value *Val0 = EmitScalarExpr(E->getArg(2));
12599 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12600 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12601 Value *Val3 = EmitScalarExpr(E->getArg(0));
12602 Value *Val4 = EmitScalarExpr(E->getArg(1));
12603 Value *Val5 = Builder.CreateICmpSLE(Val3, Val4);
12604 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12605 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12606 return Builder.CreateIntCast(Val7, Int16Ty, false);
12607}
12608case ARM::BI__builtin_arm_mve_vcmpltq_m_s16:
12609case ARM::BI__builtin_arm_mve_vcmpltq_m_s32:
12610case ARM::BI__builtin_arm_mve_vcmpltq_m_s8: {
12611 llvm::Type * Param0;
12612 switch (BuiltinID) {
12613 case ARM::BI__builtin_arm_mve_vcmpltq_m_s16:
12614 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12615 break;
12616 case ARM::BI__builtin_arm_mve_vcmpltq_m_s32:
12617 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12618 break;
12619 case ARM::BI__builtin_arm_mve_vcmpltq_m_s8:
12620 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12621 break;
12622 }
12623 Value *Val0 = EmitScalarExpr(E->getArg(2));
12624 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12625 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12626 Value *Val3 = EmitScalarExpr(E->getArg(0));
12627 Value *Val4 = EmitScalarExpr(E->getArg(1));
12628 Value *Val5 = Builder.CreateICmpSLT(Val3, Val4);
12629 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12630 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12631 return Builder.CreateIntCast(Val7, Int16Ty, false);
12632}
12633case ARM::BI__builtin_arm_mve_vcmpcsq_m_u16:
12634case ARM::BI__builtin_arm_mve_vcmpcsq_m_u32:
12635case ARM::BI__builtin_arm_mve_vcmpcsq_m_u8: {
12636 llvm::Type * Param0;
12637 switch (BuiltinID) {
12638 case ARM::BI__builtin_arm_mve_vcmpcsq_m_u16:
12639 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12640 break;
12641 case ARM::BI__builtin_arm_mve_vcmpcsq_m_u32:
12642 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12643 break;
12644 case ARM::BI__builtin_arm_mve_vcmpcsq_m_u8:
12645 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12646 break;
12647 }
12648 Value *Val0 = EmitScalarExpr(E->getArg(2));
12649 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12650 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12651 Value *Val3 = EmitScalarExpr(E->getArg(0));
12652 Value *Val4 = EmitScalarExpr(E->getArg(1));
12653 Value *Val5 = Builder.CreateICmpUGE(Val3, Val4);
12654 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12655 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12656 return Builder.CreateIntCast(Val7, Int16Ty, false);
12657}
12658case ARM::BI__builtin_arm_mve_vcmphiq_m_u16:
12659case ARM::BI__builtin_arm_mve_vcmphiq_m_u32:
12660case ARM::BI__builtin_arm_mve_vcmphiq_m_u8: {
12661 llvm::Type * Param0;
12662 switch (BuiltinID) {
12663 case ARM::BI__builtin_arm_mve_vcmphiq_m_u16:
12664 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12665 break;
12666 case ARM::BI__builtin_arm_mve_vcmphiq_m_u32:
12667 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12668 break;
12669 case ARM::BI__builtin_arm_mve_vcmphiq_m_u8:
12670 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12671 break;
12672 }
12673 Value *Val0 = EmitScalarExpr(E->getArg(2));
12674 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12675 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12676 Value *Val3 = EmitScalarExpr(E->getArg(0));
12677 Value *Val4 = EmitScalarExpr(E->getArg(1));
12678 Value *Val5 = Builder.CreateICmpUGT(Val3, Val4);
12679 Value *Val6 = Builder.CreateAnd(Val2, Val5);
12680 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_v2i, {Param0}), {Val6});
12681 return Builder.CreateIntCast(Val7, Int16Ty, false);
12682}
12683case ARM::BI__builtin_arm_mve_vpselq_f16:
12684case ARM::BI__builtin_arm_mve_vpselq_f32:
12685case ARM::BI__builtin_arm_mve_vpselq_s16:
12686case ARM::BI__builtin_arm_mve_vpselq_s32:
12687case ARM::BI__builtin_arm_mve_vpselq_s8:
12688case ARM::BI__builtin_arm_mve_vpselq_u16:
12689case ARM::BI__builtin_arm_mve_vpselq_u32:
12690case ARM::BI__builtin_arm_mve_vpselq_u8: {
12691 llvm::Type * Param0;
12692 switch (BuiltinID) {
12693 case ARM::BI__builtin_arm_mve_vpselq_f16:
12694 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12695 break;
12696 case ARM::BI__builtin_arm_mve_vpselq_f32:
12697 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12698 break;
12699 case ARM::BI__builtin_arm_mve_vpselq_s16:
12700 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12701 break;
12702 case ARM::BI__builtin_arm_mve_vpselq_s32:
12703 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12704 break;
12705 case ARM::BI__builtin_arm_mve_vpselq_s8:
12706 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12707 break;
12708 case ARM::BI__builtin_arm_mve_vpselq_u16:
12709 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12710 break;
12711 case ARM::BI__builtin_arm_mve_vpselq_u32:
12712 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12713 break;
12714 case ARM::BI__builtin_arm_mve_vpselq_u8:
12715 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12716 break;
12717 }
12718 Value *Val0 = EmitScalarExpr(E->getArg(2));
12719 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12720 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12721 Value *Val3 = EmitScalarExpr(E->getArg(0));
12722 Value *Val4 = EmitScalarExpr(E->getArg(1));
12723 return Builder.CreateSelect(Val2, Val3, Val4);
12724}
12725case ARM::BI__builtin_arm_mve_vdupq_m_n_f16:
12726case ARM::BI__builtin_arm_mve_vdupq_m_n_f32:
12727case ARM::BI__builtin_arm_mve_vdupq_m_n_s16:
12728case ARM::BI__builtin_arm_mve_vdupq_m_n_s32:
12729case ARM::BI__builtin_arm_mve_vdupq_m_n_s8:
12730case ARM::BI__builtin_arm_mve_vdupq_m_n_u16:
12731case ARM::BI__builtin_arm_mve_vdupq_m_n_u32:
12732case ARM::BI__builtin_arm_mve_vdupq_m_n_u8: {
12733 llvm::Type * Param0;
12734 switch (BuiltinID) {
12735 case ARM::BI__builtin_arm_mve_vdupq_m_n_f16:
12736 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12737 break;
12738 case ARM::BI__builtin_arm_mve_vdupq_m_n_f32:
12739 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12740 break;
12741 case ARM::BI__builtin_arm_mve_vdupq_m_n_s16:
12742 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12743 break;
12744 case ARM::BI__builtin_arm_mve_vdupq_m_n_s32:
12745 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12746 break;
12747 case ARM::BI__builtin_arm_mve_vdupq_m_n_s8:
12748 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12749 break;
12750 case ARM::BI__builtin_arm_mve_vdupq_m_n_u16:
12751 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12752 break;
12753 case ARM::BI__builtin_arm_mve_vdupq_m_n_u32:
12754 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12755 break;
12756 case ARM::BI__builtin_arm_mve_vdupq_m_n_u8:
12757 Param0 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
12758 break;
12759 }
12760 Value *Val0 = EmitScalarExpr(E->getArg(2));
12761 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12762 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param0}), {Val1});
12763 Value *Val3 = EmitScalarExpr(E->getArg(1));
12764 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
12765 Value *Val5 = EmitScalarExpr(E->getArg(0));
12766 return Builder.CreateSelect(Val2, Val4, Val5);
12767}
12768case ARM::BI__builtin_arm_mve_vbicq_m_n_s32:
12769case ARM::BI__builtin_arm_mve_vbicq_m_n_u32: {
12770 bool Param0;
12771 switch (BuiltinID) {
12772 case ARM::BI__builtin_arm_mve_vbicq_m_n_s32:
12773 Param0 = true;
12774 break;
12775 case ARM::BI__builtin_arm_mve_vbicq_m_n_u32:
12776 Param0 = false;
12777 break;
12778 }
12779 Value *Val0 = EmitScalarExpr(E->getArg(2));
12780 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12781 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
12782 Value *Val3 = EmitScalarExpr(E->getArg(0));
12783 Value *Val4 = EmitScalarExpr(E->getArg(1));
12784 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, Param0);
12785 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
12786 Value *Val7 = Builder.CreateNot(Val6);
12787 Value *Val8 = Builder.CreateAnd(Val3, Val7);
12788 return Builder.CreateSelect(Val2, Val8, Val3);
12789}
12790case ARM::BI__builtin_arm_mve_vorrq_m_n_s32:
12791case ARM::BI__builtin_arm_mve_vorrq_m_n_u32: {
12792 bool Param0;
12793 switch (BuiltinID) {
12794 case ARM::BI__builtin_arm_mve_vorrq_m_n_s32:
12795 Param0 = true;
12796 break;
12797 case ARM::BI__builtin_arm_mve_vorrq_m_n_u32:
12798 Param0 = false;
12799 break;
12800 }
12801 Value *Val0 = EmitScalarExpr(E->getArg(2));
12802 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12803 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
12804 Value *Val3 = EmitScalarExpr(E->getArg(0));
12805 Value *Val4 = EmitScalarExpr(E->getArg(1));
12806 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, Param0);
12807 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
12808 Value *Val7 = Builder.CreateOr(Val3, Val6);
12809 return Builder.CreateSelect(Val2, Val7, Val3);
12810}
12811case ARM::BI__builtin_arm_mve_vpselq_s64:
12812case ARM::BI__builtin_arm_mve_vpselq_u64: {
12813 Value *Val0 = EmitScalarExpr(E->getArg(2));
12814 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12815 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
12816 Value *Val3 = EmitScalarExpr(E->getArg(0));
12817 llvm::Type *Val4 = llvm::FixedVectorType::get(Int32Ty, 4);
12818 Value *Val5 = Builder.CreateBitCast(Val3, Val4);
12819 Value *Val6 = EmitScalarExpr(E->getArg(1));
12820 llvm::Type *Val7 = llvm::FixedVectorType::get(Int32Ty, 4);
12821 Value *Val8 = Builder.CreateBitCast(Val6, Val7);
12822 Value *Val9 = Builder.CreateSelect(Val2, Val5, Val8);
12823 llvm::Type *Val10 = llvm::FixedVectorType::get(Int64Ty, 2);
12824 return Builder.CreateBitCast(Val9, Val10);
12825}
12826case ARM::BI__builtin_arm_mve_vmvnq_m_n_s32:
12827case ARM::BI__builtin_arm_mve_vmvnq_m_n_u32: {
12828 bool Param0;
12829 switch (BuiltinID) {
12830 case ARM::BI__builtin_arm_mve_vmvnq_m_n_s32:
12831 Param0 = true;
12832 break;
12833 case ARM::BI__builtin_arm_mve_vmvnq_m_n_u32:
12834 Param0 = false;
12835 break;
12836 }
12837 Value *Val0 = EmitScalarExpr(E->getArg(2));
12838 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12839 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1});
12840 Value *Val3 = EmitScalarExpr(E->getArg(1));
12841 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, Param0);
12842 Value *Val5 = ARMMVEVectorSplat(Builder, Val4);
12843 Value *Val6 = Builder.CreateNot(Val5);
12844 Value *Val7 = EmitScalarExpr(E->getArg(0));
12845 return Builder.CreateSelect(Val2, Val6, Val7);
12846}
12847case ARM::BI__builtin_arm_mve_vbicq_m_n_s16:
12848case ARM::BI__builtin_arm_mve_vbicq_m_n_u16: {
12849 bool Param0;
12850 switch (BuiltinID) {
12851 case ARM::BI__builtin_arm_mve_vbicq_m_n_s16:
12852 Param0 = true;
12853 break;
12854 case ARM::BI__builtin_arm_mve_vbicq_m_n_u16:
12855 Param0 = false;
12856 break;
12857 }
12858 Value *Val0 = EmitScalarExpr(E->getArg(2));
12859 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12860 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1});
12861 Value *Val3 = EmitScalarExpr(E->getArg(0));
12862 Value *Val4 = EmitScalarExpr(E->getArg(1));
12863 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
12864 Value *Val6 = Builder.CreateIntCast(Val5, Int16Ty, Param0);
12865 Value *Val7 = ARMMVEVectorSplat(Builder, Val6);
12866 Value *Val8 = Builder.CreateNot(Val7);
12867 Value *Val9 = Builder.CreateAnd(Val3, Val8);
12868 return Builder.CreateSelect(Val2, Val9, Val3);
12869}
12870case ARM::BI__builtin_arm_mve_vorrq_m_n_s16:
12871case ARM::BI__builtin_arm_mve_vorrq_m_n_u16: {
12872 bool Param0;
12873 switch (BuiltinID) {
12874 case ARM::BI__builtin_arm_mve_vorrq_m_n_s16:
12875 Param0 = true;
12876 break;
12877 case ARM::BI__builtin_arm_mve_vorrq_m_n_u16:
12878 Param0 = false;
12879 break;
12880 }
12881 Value *Val0 = EmitScalarExpr(E->getArg(2));
12882 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12883 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1});
12884 Value *Val3 = EmitScalarExpr(E->getArg(0));
12885 Value *Val4 = EmitScalarExpr(E->getArg(1));
12886 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
12887 Value *Val6 = Builder.CreateIntCast(Val5, Int16Ty, Param0);
12888 Value *Val7 = ARMMVEVectorSplat(Builder, Val6);
12889 Value *Val8 = Builder.CreateOr(Val3, Val7);
12890 return Builder.CreateSelect(Val2, Val8, Val3);
12891}
12892case ARM::BI__builtin_arm_mve_vmvnq_m_n_s16:
12893case ARM::BI__builtin_arm_mve_vmvnq_m_n_u16: {
12894 bool Param0;
12895 switch (BuiltinID) {
12896 case ARM::BI__builtin_arm_mve_vmvnq_m_n_s16:
12897 Param0 = true;
12898 break;
12899 case ARM::BI__builtin_arm_mve_vmvnq_m_n_u16:
12900 Param0 = false;
12901 break;
12902 }
12903 Value *Val0 = EmitScalarExpr(E->getArg(2));
12904 Value *Val1 = Builder.CreateIntCast(Val0, Int32Ty, false);
12905 Value *Val2 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1});
12906 Value *Val3 = EmitScalarExpr(E->getArg(1));
12907 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
12908 Value *Val5 = Builder.CreateIntCast(Val4, Int16Ty, Param0);
12909 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
12910 Value *Val7 = Builder.CreateNot(Val6);
12911 Value *Val8 = EmitScalarExpr(E->getArg(0));
12912 return Builder.CreateSelect(Val2, Val7, Val8);
12913}
12914case ARM::BI__builtin_arm_mve_vcvtaq_m_s16_f16:
12915case ARM::BI__builtin_arm_mve_vcvtaq_m_s32_f32:
12916case ARM::BI__builtin_arm_mve_vcvtaq_m_u16_f16:
12917case ARM::BI__builtin_arm_mve_vcvtaq_m_u32_f32:
12918case ARM::BI__builtin_arm_mve_vcvtmq_m_s16_f16:
12919case ARM::BI__builtin_arm_mve_vcvtmq_m_s32_f32:
12920case ARM::BI__builtin_arm_mve_vcvtmq_m_u16_f16:
12921case ARM::BI__builtin_arm_mve_vcvtmq_m_u32_f32:
12922case ARM::BI__builtin_arm_mve_vcvtnq_m_s16_f16:
12923case ARM::BI__builtin_arm_mve_vcvtnq_m_s32_f32:
12924case ARM::BI__builtin_arm_mve_vcvtnq_m_u16_f16:
12925case ARM::BI__builtin_arm_mve_vcvtnq_m_u32_f32:
12926case ARM::BI__builtin_arm_mve_vcvtpq_m_s16_f16:
12927case ARM::BI__builtin_arm_mve_vcvtpq_m_s32_f32:
12928case ARM::BI__builtin_arm_mve_vcvtpq_m_u16_f16:
12929case ARM::BI__builtin_arm_mve_vcvtpq_m_u32_f32: {
12930 uint32_t Param0;
12931 llvm::Type * Param1;
12932 Intrinsic::ID Param2;
12933 llvm::Type * Param3;
12934 llvm::Type * Param4;
12935 switch (BuiltinID) {
12936 case ARM::BI__builtin_arm_mve_vcvtaq_m_s16_f16:
12937 Param0 = 0;
12938 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12939 Param2 = Intrinsic::arm_mve_vcvta_predicated;
12940 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
12941 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
12942 break;
12943 case ARM::BI__builtin_arm_mve_vcvtaq_m_s32_f32:
12944 Param0 = 0;
12945 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12946 Param2 = Intrinsic::arm_mve_vcvta_predicated;
12947 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
12948 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
12949 break;
12950 case ARM::BI__builtin_arm_mve_vcvtaq_m_u16_f16:
12951 Param0 = 1;
12952 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12953 Param2 = Intrinsic::arm_mve_vcvta_predicated;
12954 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
12955 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
12956 break;
12957 case ARM::BI__builtin_arm_mve_vcvtaq_m_u32_f32:
12958 Param0 = 1;
12959 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12960 Param2 = Intrinsic::arm_mve_vcvta_predicated;
12961 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
12962 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
12963 break;
12964 case ARM::BI__builtin_arm_mve_vcvtmq_m_s16_f16:
12965 Param0 = 0;
12966 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12967 Param2 = Intrinsic::arm_mve_vcvtm_predicated;
12968 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
12969 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
12970 break;
12971 case ARM::BI__builtin_arm_mve_vcvtmq_m_s32_f32:
12972 Param0 = 0;
12973 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12974 Param2 = Intrinsic::arm_mve_vcvtm_predicated;
12975 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
12976 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
12977 break;
12978 case ARM::BI__builtin_arm_mve_vcvtmq_m_u16_f16:
12979 Param0 = 1;
12980 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12981 Param2 = Intrinsic::arm_mve_vcvtm_predicated;
12982 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
12983 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
12984 break;
12985 case ARM::BI__builtin_arm_mve_vcvtmq_m_u32_f32:
12986 Param0 = 1;
12987 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
12988 Param2 = Intrinsic::arm_mve_vcvtm_predicated;
12989 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
12990 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
12991 break;
12992 case ARM::BI__builtin_arm_mve_vcvtnq_m_s16_f16:
12993 Param0 = 0;
12994 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
12995 Param2 = Intrinsic::arm_mve_vcvtn_predicated;
12996 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
12997 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
12998 break;
12999 case ARM::BI__builtin_arm_mve_vcvtnq_m_s32_f32:
13000 Param0 = 0;
13001 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13002 Param2 = Intrinsic::arm_mve_vcvtn_predicated;
13003 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13004 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
13005 break;
13006 case ARM::BI__builtin_arm_mve_vcvtnq_m_u16_f16:
13007 Param0 = 1;
13008 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13009 Param2 = Intrinsic::arm_mve_vcvtn_predicated;
13010 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13011 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
13012 break;
13013 case ARM::BI__builtin_arm_mve_vcvtnq_m_u32_f32:
13014 Param0 = 1;
13015 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13016 Param2 = Intrinsic::arm_mve_vcvtn_predicated;
13017 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13018 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
13019 break;
13020 case ARM::BI__builtin_arm_mve_vcvtpq_m_s16_f16:
13021 Param0 = 0;
13022 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13023 Param2 = Intrinsic::arm_mve_vcvtp_predicated;
13024 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13025 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
13026 break;
13027 case ARM::BI__builtin_arm_mve_vcvtpq_m_s32_f32:
13028 Param0 = 0;
13029 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13030 Param2 = Intrinsic::arm_mve_vcvtp_predicated;
13031 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13032 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
13033 break;
13034 case ARM::BI__builtin_arm_mve_vcvtpq_m_u16_f16:
13035 Param0 = 1;
13036 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13037 Param2 = Intrinsic::arm_mve_vcvtp_predicated;
13038 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13039 Param4 = llvm::FixedVectorType::get(HalfTy, 8);
13040 break;
13041 case ARM::BI__builtin_arm_mve_vcvtpq_m_u32_f32:
13042 Param0 = 1;
13043 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13044 Param2 = Intrinsic::arm_mve_vcvtp_predicated;
13045 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13046 Param4 = llvm::FixedVectorType::get(FloatTy, 4);
13047 break;
13048 }
13049 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13050 Value *Val1 = EmitScalarExpr(E->getArg(0));
13051 Value *Val2 = EmitScalarExpr(E->getArg(1));
13052 Value *Val3 = EmitScalarExpr(E->getArg(2));
13053 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
13054 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val4});
13055 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param4, Param1}), {Val0, Val1, Val2, Val5});
13056}
13057case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_s16:
13058case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_u16:
13059case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_s32:
13060case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_u32:
13061case ARM::BI__builtin_arm_mve_vcvtq_m_n_s16_f16:
13062case ARM::BI__builtin_arm_mve_vcvtq_m_n_s32_f32:
13063case ARM::BI__builtin_arm_mve_vcvtq_m_n_u16_f16:
13064case ARM::BI__builtin_arm_mve_vcvtq_m_n_u32_f32: {
13065 uint32_t Param0;
13066 llvm::Type * Param1;
13067 llvm::Type * Param2;
13068 llvm::Type * Param3;
13069 switch (BuiltinID) {
13070 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_s16:
13071 Param0 = 0;
13072 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13073 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13074 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13075 break;
13076 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f16_u16:
13077 Param0 = 1;
13078 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13079 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13080 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13081 break;
13082 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_s32:
13083 Param0 = 0;
13084 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13085 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13086 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13087 break;
13088 case ARM::BI__builtin_arm_mve_vcvtq_m_n_f32_u32:
13089 Param0 = 1;
13090 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13091 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13092 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13093 break;
13094 case ARM::BI__builtin_arm_mve_vcvtq_m_n_s16_f16:
13095 Param0 = 0;
13096 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13097 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13098 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13099 break;
13100 case ARM::BI__builtin_arm_mve_vcvtq_m_n_s32_f32:
13101 Param0 = 0;
13102 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13103 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13104 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13105 break;
13106 case ARM::BI__builtin_arm_mve_vcvtq_m_n_u16_f16:
13107 Param0 = 1;
13108 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13109 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13110 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13111 break;
13112 case ARM::BI__builtin_arm_mve_vcvtq_m_n_u32_f32:
13113 Param0 = 1;
13114 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13115 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13116 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13117 break;
13118 }
13119 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13120 Value *Val1 = EmitScalarExpr(E->getArg(0));
13121 Value *Val2 = EmitScalarExpr(E->getArg(1));
13122 Value *Val3 = EmitScalarExpr(E->getArg(2));
13123 Value *Val4 = EmitScalarExpr(E->getArg(3));
13124 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
13125 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
13126 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {Param2, Param3, Param1}), {Val0, Val1, Val2, Val3, Val6});
13127}
13128case ARM::BI__builtin_arm_mve_vabavq_p_s16:
13129case ARM::BI__builtin_arm_mve_vabavq_p_s32:
13130case ARM::BI__builtin_arm_mve_vabavq_p_s8:
13131case ARM::BI__builtin_arm_mve_vabavq_p_u16:
13132case ARM::BI__builtin_arm_mve_vabavq_p_u32:
13133case ARM::BI__builtin_arm_mve_vabavq_p_u8:
13134case ARM::BI__builtin_arm_mve_vcmlaq_m_f16:
13135case ARM::BI__builtin_arm_mve_vcmlaq_m_f32:
13136case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f16:
13137case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f32:
13138case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f16:
13139case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f32:
13140case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f16:
13141case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f32:
13142case ARM::BI__builtin_arm_mve_vcmulq_m_f16:
13143case ARM::BI__builtin_arm_mve_vcmulq_m_f32:
13144case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f16:
13145case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f32:
13146case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f16:
13147case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f32:
13148case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f16:
13149case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f32: {
13150 uint32_t Param0;
13151 llvm::Type * Param1;
13152 Intrinsic::ID Param2;
13153 llvm::Type * Param3;
13154 switch (BuiltinID) {
13155 case ARM::BI__builtin_arm_mve_vabavq_p_s16:
13156 Param0 = 0;
13157 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13158 Param2 = Intrinsic::arm_mve_vabav_predicated;
13159 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13160 break;
13161 case ARM::BI__builtin_arm_mve_vabavq_p_s32:
13162 Param0 = 0;
13163 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13164 Param2 = Intrinsic::arm_mve_vabav_predicated;
13165 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13166 break;
13167 case ARM::BI__builtin_arm_mve_vabavq_p_s8:
13168 Param0 = 0;
13169 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13170 Param2 = Intrinsic::arm_mve_vabav_predicated;
13171 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13172 break;
13173 case ARM::BI__builtin_arm_mve_vabavq_p_u16:
13174 Param0 = 1;
13175 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13176 Param2 = Intrinsic::arm_mve_vabav_predicated;
13177 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13178 break;
13179 case ARM::BI__builtin_arm_mve_vabavq_p_u32:
13180 Param0 = 1;
13181 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13182 Param2 = Intrinsic::arm_mve_vabav_predicated;
13183 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13184 break;
13185 case ARM::BI__builtin_arm_mve_vabavq_p_u8:
13186 Param0 = 1;
13187 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13188 Param2 = Intrinsic::arm_mve_vabav_predicated;
13189 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13190 break;
13191 case ARM::BI__builtin_arm_mve_vcmlaq_m_f16:
13192 Param0 = 0;
13193 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13194 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13195 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13196 break;
13197 case ARM::BI__builtin_arm_mve_vcmlaq_m_f32:
13198 Param0 = 0;
13199 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13200 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13201 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13202 break;
13203 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f16:
13204 Param0 = 2;
13205 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13206 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13207 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13208 break;
13209 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_m_f32:
13210 Param0 = 2;
13211 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13212 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13213 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13214 break;
13215 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f16:
13216 Param0 = 3;
13217 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13218 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13219 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13220 break;
13221 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_m_f32:
13222 Param0 = 3;
13223 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13224 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13225 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13226 break;
13227 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f16:
13228 Param0 = 1;
13229 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13230 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13231 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13232 break;
13233 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_m_f32:
13234 Param0 = 1;
13235 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13236 Param2 = Intrinsic::arm_mve_vcmlaq_predicated;
13237 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13238 break;
13239 case ARM::BI__builtin_arm_mve_vcmulq_m_f16:
13240 Param0 = 0;
13241 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13242 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13243 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13244 break;
13245 case ARM::BI__builtin_arm_mve_vcmulq_m_f32:
13246 Param0 = 0;
13247 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13248 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13249 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13250 break;
13251 case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f16:
13252 Param0 = 2;
13253 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13254 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13255 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13256 break;
13257 case ARM::BI__builtin_arm_mve_vcmulq_rot180_m_f32:
13258 Param0 = 2;
13259 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13260 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13261 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13262 break;
13263 case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f16:
13264 Param0 = 3;
13265 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13266 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13267 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13268 break;
13269 case ARM::BI__builtin_arm_mve_vcmulq_rot270_m_f32:
13270 Param0 = 3;
13271 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13272 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13273 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13274 break;
13275 case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f16:
13276 Param0 = 1;
13277 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13278 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13279 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13280 break;
13281 case ARM::BI__builtin_arm_mve_vcmulq_rot90_m_f32:
13282 Param0 = 1;
13283 Param1 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13284 Param2 = Intrinsic::arm_mve_vcmulq_predicated;
13285 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13286 break;
13287 }
13288 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13289 Value *Val1 = EmitScalarExpr(E->getArg(0));
13290 Value *Val2 = EmitScalarExpr(E->getArg(1));
13291 Value *Val3 = EmitScalarExpr(E->getArg(2));
13292 Value *Val4 = EmitScalarExpr(E->getArg(3));
13293 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
13294 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param1}), {Val5});
13295 return Builder.CreateCall(CGM.getIntrinsic(Param2, {Param3, Param1}), {Val0, Val1, Val2, Val3, Val6});
13296}
13297case ARM::BI__builtin_arm_mve_vabavq_s16:
13298case ARM::BI__builtin_arm_mve_vabavq_s32:
13299case ARM::BI__builtin_arm_mve_vabavq_s8:
13300case ARM::BI__builtin_arm_mve_vabavq_u16:
13301case ARM::BI__builtin_arm_mve_vabavq_u32:
13302case ARM::BI__builtin_arm_mve_vabavq_u8:
13303case ARM::BI__builtin_arm_mve_vcmlaq_f16:
13304case ARM::BI__builtin_arm_mve_vcmlaq_f32:
13305case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f16:
13306case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f32:
13307case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f16:
13308case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f32:
13309case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f16:
13310case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f32: {
13311 uint32_t Param0;
13312 Intrinsic::ID Param1;
13313 llvm::Type * Param2;
13314 switch (BuiltinID) {
13315 case ARM::BI__builtin_arm_mve_vabavq_s16:
13316 Param0 = 0;
13317 Param1 = Intrinsic::arm_mve_vabav;
13318 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13319 break;
13320 case ARM::BI__builtin_arm_mve_vabavq_s32:
13321 Param0 = 0;
13322 Param1 = Intrinsic::arm_mve_vabav;
13323 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13324 break;
13325 case ARM::BI__builtin_arm_mve_vabavq_s8:
13326 Param0 = 0;
13327 Param1 = Intrinsic::arm_mve_vabav;
13328 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13329 break;
13330 case ARM::BI__builtin_arm_mve_vabavq_u16:
13331 Param0 = 1;
13332 Param1 = Intrinsic::arm_mve_vabav;
13333 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13334 break;
13335 case ARM::BI__builtin_arm_mve_vabavq_u32:
13336 Param0 = 1;
13337 Param1 = Intrinsic::arm_mve_vabav;
13338 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13339 break;
13340 case ARM::BI__builtin_arm_mve_vabavq_u8:
13341 Param0 = 1;
13342 Param1 = Intrinsic::arm_mve_vabav;
13343 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13344 break;
13345 case ARM::BI__builtin_arm_mve_vcmlaq_f16:
13346 Param0 = 0;
13347 Param1 = Intrinsic::arm_mve_vcmlaq;
13348 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13349 break;
13350 case ARM::BI__builtin_arm_mve_vcmlaq_f32:
13351 Param0 = 0;
13352 Param1 = Intrinsic::arm_mve_vcmlaq;
13353 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13354 break;
13355 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f16:
13356 Param0 = 2;
13357 Param1 = Intrinsic::arm_mve_vcmlaq;
13358 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13359 break;
13360 case ARM::BI__builtin_arm_mve_vcmlaq_rot180_f32:
13361 Param0 = 2;
13362 Param1 = Intrinsic::arm_mve_vcmlaq;
13363 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13364 break;
13365 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f16:
13366 Param0 = 3;
13367 Param1 = Intrinsic::arm_mve_vcmlaq;
13368 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13369 break;
13370 case ARM::BI__builtin_arm_mve_vcmlaq_rot270_f32:
13371 Param0 = 3;
13372 Param1 = Intrinsic::arm_mve_vcmlaq;
13373 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13374 break;
13375 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f16:
13376 Param0 = 1;
13377 Param1 = Intrinsic::arm_mve_vcmlaq;
13378 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13379 break;
13380 case ARM::BI__builtin_arm_mve_vcmlaq_rot90_f32:
13381 Param0 = 1;
13382 Param1 = Intrinsic::arm_mve_vcmlaq;
13383 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13384 break;
13385 }
13386 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13387 Value *Val1 = EmitScalarExpr(E->getArg(0));
13388 Value *Val2 = EmitScalarExpr(E->getArg(1));
13389 Value *Val3 = EmitScalarExpr(E->getArg(2));
13390 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2}), {Val0, Val1, Val2, Val3});
13391}
13392case ARM::BI__builtin_arm_mve_vcmulq_f16:
13393case ARM::BI__builtin_arm_mve_vcmulq_f32:
13394case ARM::BI__builtin_arm_mve_vcmulq_rot180_f16:
13395case ARM::BI__builtin_arm_mve_vcmulq_rot180_f32:
13396case ARM::BI__builtin_arm_mve_vcmulq_rot270_f16:
13397case ARM::BI__builtin_arm_mve_vcmulq_rot270_f32:
13398case ARM::BI__builtin_arm_mve_vcmulq_rot90_f16:
13399case ARM::BI__builtin_arm_mve_vcmulq_rot90_f32: {
13400 uint32_t Param0;
13401 llvm::Type * Param1;
13402 switch (BuiltinID) {
13403 case ARM::BI__builtin_arm_mve_vcmulq_f16:
13404 Param0 = 0;
13405 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
13406 break;
13407 case ARM::BI__builtin_arm_mve_vcmulq_f32:
13408 Param0 = 0;
13409 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
13410 break;
13411 case ARM::BI__builtin_arm_mve_vcmulq_rot180_f16:
13412 Param0 = 2;
13413 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
13414 break;
13415 case ARM::BI__builtin_arm_mve_vcmulq_rot180_f32:
13416 Param0 = 2;
13417 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
13418 break;
13419 case ARM::BI__builtin_arm_mve_vcmulq_rot270_f16:
13420 Param0 = 3;
13421 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
13422 break;
13423 case ARM::BI__builtin_arm_mve_vcmulq_rot270_f32:
13424 Param0 = 3;
13425 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
13426 break;
13427 case ARM::BI__builtin_arm_mve_vcmulq_rot90_f16:
13428 Param0 = 1;
13429 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
13430 break;
13431 case ARM::BI__builtin_arm_mve_vcmulq_rot90_f32:
13432 Param0 = 1;
13433 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
13434 break;
13435 }
13436 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13437 Value *Val1 = EmitScalarExpr(E->getArg(0));
13438 Value *Val2 = EmitScalarExpr(E->getArg(1));
13439 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcmulq, {Param1}), {Val0, Val1, Val2});
13440}
13441case ARM::BI__builtin_arm_mve_vcvtq_n_f16_s16:
13442case ARM::BI__builtin_arm_mve_vcvtq_n_f16_u16:
13443case ARM::BI__builtin_arm_mve_vcvtq_n_f32_s32:
13444case ARM::BI__builtin_arm_mve_vcvtq_n_f32_u32:
13445case ARM::BI__builtin_arm_mve_vcvtq_n_s16_f16:
13446case ARM::BI__builtin_arm_mve_vcvtq_n_s32_f32:
13447case ARM::BI__builtin_arm_mve_vcvtq_n_u16_f16:
13448case ARM::BI__builtin_arm_mve_vcvtq_n_u32_f32: {
13449 uint32_t Param0;
13450 llvm::Type * Param1;
13451 llvm::Type * Param2;
13452 switch (BuiltinID) {
13453 case ARM::BI__builtin_arm_mve_vcvtq_n_f16_s16:
13454 Param0 = 0;
13455 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
13456 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13457 break;
13458 case ARM::BI__builtin_arm_mve_vcvtq_n_f16_u16:
13459 Param0 = 1;
13460 Param1 = llvm::FixedVectorType::get(HalfTy, 8);
13461 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13462 break;
13463 case ARM::BI__builtin_arm_mve_vcvtq_n_f32_s32:
13464 Param0 = 0;
13465 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
13466 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13467 break;
13468 case ARM::BI__builtin_arm_mve_vcvtq_n_f32_u32:
13469 Param0 = 1;
13470 Param1 = llvm::FixedVectorType::get(FloatTy, 4);
13471 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13472 break;
13473 case ARM::BI__builtin_arm_mve_vcvtq_n_s16_f16:
13474 Param0 = 0;
13475 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
13476 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13477 break;
13478 case ARM::BI__builtin_arm_mve_vcvtq_n_s32_f32:
13479 Param0 = 0;
13480 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
13481 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13482 break;
13483 case ARM::BI__builtin_arm_mve_vcvtq_n_u16_f16:
13484 Param0 = 1;
13485 Param1 = llvm::FixedVectorType::get(Int16Ty, 8);
13486 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13487 break;
13488 case ARM::BI__builtin_arm_mve_vcvtq_n_u32_f32:
13489 Param0 = 1;
13490 Param1 = llvm::FixedVectorType::get(Int32Ty, 4);
13491 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13492 break;
13493 }
13494 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13495 Value *Val1 = EmitScalarExpr(E->getArg(0));
13496 Value *Val2 = EmitScalarExpr(E->getArg(1));
13497 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix, {Param1, Param2}), {Val0, Val1, Val2});
13498}
13499case ARM::BI__builtin_arm_mve_vcvtaq_s16_f16:
13500case ARM::BI__builtin_arm_mve_vcvtaq_s32_f32:
13501case ARM::BI__builtin_arm_mve_vcvtaq_u16_f16:
13502case ARM::BI__builtin_arm_mve_vcvtaq_u32_f32:
13503case ARM::BI__builtin_arm_mve_vcvtmq_s16_f16:
13504case ARM::BI__builtin_arm_mve_vcvtmq_s32_f32:
13505case ARM::BI__builtin_arm_mve_vcvtmq_u16_f16:
13506case ARM::BI__builtin_arm_mve_vcvtmq_u32_f32:
13507case ARM::BI__builtin_arm_mve_vcvtnq_s16_f16:
13508case ARM::BI__builtin_arm_mve_vcvtnq_s32_f32:
13509case ARM::BI__builtin_arm_mve_vcvtnq_u16_f16:
13510case ARM::BI__builtin_arm_mve_vcvtnq_u32_f32:
13511case ARM::BI__builtin_arm_mve_vcvtpq_s16_f16:
13512case ARM::BI__builtin_arm_mve_vcvtpq_s32_f32:
13513case ARM::BI__builtin_arm_mve_vcvtpq_u16_f16:
13514case ARM::BI__builtin_arm_mve_vcvtpq_u32_f32: {
13515 uint32_t Param0;
13516 Intrinsic::ID Param1;
13517 llvm::Type * Param2;
13518 llvm::Type * Param3;
13519 switch (BuiltinID) {
13520 case ARM::BI__builtin_arm_mve_vcvtaq_s16_f16:
13521 Param0 = 0;
13522 Param1 = Intrinsic::arm_mve_vcvta;
13523 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13524 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13525 break;
13526 case ARM::BI__builtin_arm_mve_vcvtaq_s32_f32:
13527 Param0 = 0;
13528 Param1 = Intrinsic::arm_mve_vcvta;
13529 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13530 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13531 break;
13532 case ARM::BI__builtin_arm_mve_vcvtaq_u16_f16:
13533 Param0 = 1;
13534 Param1 = Intrinsic::arm_mve_vcvta;
13535 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13536 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13537 break;
13538 case ARM::BI__builtin_arm_mve_vcvtaq_u32_f32:
13539 Param0 = 1;
13540 Param1 = Intrinsic::arm_mve_vcvta;
13541 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13542 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13543 break;
13544 case ARM::BI__builtin_arm_mve_vcvtmq_s16_f16:
13545 Param0 = 0;
13546 Param1 = Intrinsic::arm_mve_vcvtm;
13547 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13548 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13549 break;
13550 case ARM::BI__builtin_arm_mve_vcvtmq_s32_f32:
13551 Param0 = 0;
13552 Param1 = Intrinsic::arm_mve_vcvtm;
13553 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13554 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13555 break;
13556 case ARM::BI__builtin_arm_mve_vcvtmq_u16_f16:
13557 Param0 = 1;
13558 Param1 = Intrinsic::arm_mve_vcvtm;
13559 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13560 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13561 break;
13562 case ARM::BI__builtin_arm_mve_vcvtmq_u32_f32:
13563 Param0 = 1;
13564 Param1 = Intrinsic::arm_mve_vcvtm;
13565 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13566 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13567 break;
13568 case ARM::BI__builtin_arm_mve_vcvtnq_s16_f16:
13569 Param0 = 0;
13570 Param1 = Intrinsic::arm_mve_vcvtn;
13571 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13572 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13573 break;
13574 case ARM::BI__builtin_arm_mve_vcvtnq_s32_f32:
13575 Param0 = 0;
13576 Param1 = Intrinsic::arm_mve_vcvtn;
13577 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13578 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13579 break;
13580 case ARM::BI__builtin_arm_mve_vcvtnq_u16_f16:
13581 Param0 = 1;
13582 Param1 = Intrinsic::arm_mve_vcvtn;
13583 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13584 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13585 break;
13586 case ARM::BI__builtin_arm_mve_vcvtnq_u32_f32:
13587 Param0 = 1;
13588 Param1 = Intrinsic::arm_mve_vcvtn;
13589 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13590 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13591 break;
13592 case ARM::BI__builtin_arm_mve_vcvtpq_s16_f16:
13593 Param0 = 0;
13594 Param1 = Intrinsic::arm_mve_vcvtp;
13595 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13596 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13597 break;
13598 case ARM::BI__builtin_arm_mve_vcvtpq_s32_f32:
13599 Param0 = 0;
13600 Param1 = Intrinsic::arm_mve_vcvtp;
13601 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13602 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13603 break;
13604 case ARM::BI__builtin_arm_mve_vcvtpq_u16_f16:
13605 Param0 = 1;
13606 Param1 = Intrinsic::arm_mve_vcvtp;
13607 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13608 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13609 break;
13610 case ARM::BI__builtin_arm_mve_vcvtpq_u32_f32:
13611 Param0 = 1;
13612 Param1 = Intrinsic::arm_mve_vcvtp;
13613 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13614 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13615 break;
13616 }
13617 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13618 Value *Val1 = EmitScalarExpr(E->getArg(0));
13619 return Builder.CreateCall(CGM.getIntrinsic(Param1, {Param2, Param3}), {Val0, Val1});
13620}
13621case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f16:
13622case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f32:
13623case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s16:
13624case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s32:
13625case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s8:
13626case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u16:
13627case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u32:
13628case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u8:
13629case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f16:
13630case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f32:
13631case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s16:
13632case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s32:
13633case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s8:
13634case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u16:
13635case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u32:
13636case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u8:
13637case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s16:
13638case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s32:
13639case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s8:
13640case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s16:
13641case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s32:
13642case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s8: {
13643 uint32_t Param0;
13644 uint32_t Param1;
13645 llvm::Type * Param2;
13646 llvm::Type * Param3;
13647 switch (BuiltinID) {
13648 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f16:
13649 Param0 = 1;
13650 Param1 = 1;
13651 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13652 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13653 break;
13654 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_f32:
13655 Param0 = 1;
13656 Param1 = 1;
13657 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13658 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13659 break;
13660 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s16:
13661 Param0 = 1;
13662 Param1 = 1;
13663 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13664 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13665 break;
13666 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s32:
13667 Param0 = 1;
13668 Param1 = 1;
13669 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13670 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13671 break;
13672 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_s8:
13673 Param0 = 1;
13674 Param1 = 1;
13675 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13676 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13677 break;
13678 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u16:
13679 Param0 = 1;
13680 Param1 = 1;
13681 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13682 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13683 break;
13684 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u32:
13685 Param0 = 1;
13686 Param1 = 1;
13687 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13688 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13689 break;
13690 case ARM::BI__builtin_arm_mve_vcaddq_rot270_m_u8:
13691 Param0 = 1;
13692 Param1 = 1;
13693 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13694 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13695 break;
13696 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f16:
13697 Param0 = 1;
13698 Param1 = 0;
13699 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13700 Param3 = llvm::FixedVectorType::get(HalfTy, 8);
13701 break;
13702 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_f32:
13703 Param0 = 1;
13704 Param1 = 0;
13705 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13706 Param3 = llvm::FixedVectorType::get(FloatTy, 4);
13707 break;
13708 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s16:
13709 Param0 = 1;
13710 Param1 = 0;
13711 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13712 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13713 break;
13714 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s32:
13715 Param0 = 1;
13716 Param1 = 0;
13717 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13718 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13719 break;
13720 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_s8:
13721 Param0 = 1;
13722 Param1 = 0;
13723 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13724 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13725 break;
13726 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u16:
13727 Param0 = 1;
13728 Param1 = 0;
13729 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13730 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13731 break;
13732 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u32:
13733 Param0 = 1;
13734 Param1 = 0;
13735 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13736 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13737 break;
13738 case ARM::BI__builtin_arm_mve_vcaddq_rot90_m_u8:
13739 Param0 = 1;
13740 Param1 = 0;
13741 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13742 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13743 break;
13744 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s16:
13745 Param0 = 0;
13746 Param1 = 1;
13747 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13748 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13749 break;
13750 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s32:
13751 Param0 = 0;
13752 Param1 = 1;
13753 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13754 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13755 break;
13756 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_m_s8:
13757 Param0 = 0;
13758 Param1 = 1;
13759 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13760 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13761 break;
13762 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s16:
13763 Param0 = 0;
13764 Param1 = 0;
13765 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13766 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
13767 break;
13768 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s32:
13769 Param0 = 0;
13770 Param1 = 0;
13771 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13772 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
13773 break;
13774 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_m_s8:
13775 Param0 = 0;
13776 Param1 = 0;
13777 Param2 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13778 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
13779 break;
13780 }
13781 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13782 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
13783 Value *Val2 = EmitScalarExpr(E->getArg(0));
13784 Value *Val3 = EmitScalarExpr(E->getArg(1));
13785 Value *Val4 = EmitScalarExpr(E->getArg(2));
13786 Value *Val5 = EmitScalarExpr(E->getArg(3));
13787 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
13788 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param2}), {Val6});
13789 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {Param3, Param2}), {Val0, Val1, Val2, Val3, Val4, Val7});
13790}
13791case ARM::BI__builtin_arm_mve_vcaddq_rot270_f16:
13792case ARM::BI__builtin_arm_mve_vcaddq_rot270_f32:
13793case ARM::BI__builtin_arm_mve_vcaddq_rot270_s16:
13794case ARM::BI__builtin_arm_mve_vcaddq_rot270_s32:
13795case ARM::BI__builtin_arm_mve_vcaddq_rot270_s8:
13796case ARM::BI__builtin_arm_mve_vcaddq_rot270_u16:
13797case ARM::BI__builtin_arm_mve_vcaddq_rot270_u32:
13798case ARM::BI__builtin_arm_mve_vcaddq_rot270_u8:
13799case ARM::BI__builtin_arm_mve_vcaddq_rot90_f16:
13800case ARM::BI__builtin_arm_mve_vcaddq_rot90_f32:
13801case ARM::BI__builtin_arm_mve_vcaddq_rot90_s16:
13802case ARM::BI__builtin_arm_mve_vcaddq_rot90_s32:
13803case ARM::BI__builtin_arm_mve_vcaddq_rot90_s8:
13804case ARM::BI__builtin_arm_mve_vcaddq_rot90_u16:
13805case ARM::BI__builtin_arm_mve_vcaddq_rot90_u32:
13806case ARM::BI__builtin_arm_mve_vcaddq_rot90_u8:
13807case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s16:
13808case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s32:
13809case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s8:
13810case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s16:
13811case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s32:
13812case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s8: {
13813 uint32_t Param0;
13814 uint32_t Param1;
13815 llvm::Type * Param2;
13816 switch (BuiltinID) {
13817 case ARM::BI__builtin_arm_mve_vcaddq_rot270_f16:
13818 Param0 = 1;
13819 Param1 = 1;
13820 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13821 break;
13822 case ARM::BI__builtin_arm_mve_vcaddq_rot270_f32:
13823 Param0 = 1;
13824 Param1 = 1;
13825 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13826 break;
13827 case ARM::BI__builtin_arm_mve_vcaddq_rot270_s16:
13828 Param0 = 1;
13829 Param1 = 1;
13830 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13831 break;
13832 case ARM::BI__builtin_arm_mve_vcaddq_rot270_s32:
13833 Param0 = 1;
13834 Param1 = 1;
13835 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13836 break;
13837 case ARM::BI__builtin_arm_mve_vcaddq_rot270_s8:
13838 Param0 = 1;
13839 Param1 = 1;
13840 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13841 break;
13842 case ARM::BI__builtin_arm_mve_vcaddq_rot270_u16:
13843 Param0 = 1;
13844 Param1 = 1;
13845 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13846 break;
13847 case ARM::BI__builtin_arm_mve_vcaddq_rot270_u32:
13848 Param0 = 1;
13849 Param1 = 1;
13850 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13851 break;
13852 case ARM::BI__builtin_arm_mve_vcaddq_rot270_u8:
13853 Param0 = 1;
13854 Param1 = 1;
13855 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13856 break;
13857 case ARM::BI__builtin_arm_mve_vcaddq_rot90_f16:
13858 Param0 = 1;
13859 Param1 = 0;
13860 Param2 = llvm::FixedVectorType::get(HalfTy, 8);
13861 break;
13862 case ARM::BI__builtin_arm_mve_vcaddq_rot90_f32:
13863 Param0 = 1;
13864 Param1 = 0;
13865 Param2 = llvm::FixedVectorType::get(FloatTy, 4);
13866 break;
13867 case ARM::BI__builtin_arm_mve_vcaddq_rot90_s16:
13868 Param0 = 1;
13869 Param1 = 0;
13870 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13871 break;
13872 case ARM::BI__builtin_arm_mve_vcaddq_rot90_s32:
13873 Param0 = 1;
13874 Param1 = 0;
13875 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13876 break;
13877 case ARM::BI__builtin_arm_mve_vcaddq_rot90_s8:
13878 Param0 = 1;
13879 Param1 = 0;
13880 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13881 break;
13882 case ARM::BI__builtin_arm_mve_vcaddq_rot90_u16:
13883 Param0 = 1;
13884 Param1 = 0;
13885 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13886 break;
13887 case ARM::BI__builtin_arm_mve_vcaddq_rot90_u32:
13888 Param0 = 1;
13889 Param1 = 0;
13890 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13891 break;
13892 case ARM::BI__builtin_arm_mve_vcaddq_rot90_u8:
13893 Param0 = 1;
13894 Param1 = 0;
13895 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13896 break;
13897 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s16:
13898 Param0 = 0;
13899 Param1 = 1;
13900 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13901 break;
13902 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s32:
13903 Param0 = 0;
13904 Param1 = 1;
13905 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13906 break;
13907 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_s8:
13908 Param0 = 0;
13909 Param1 = 1;
13910 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13911 break;
13912 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s16:
13913 Param0 = 0;
13914 Param1 = 0;
13915 Param2 = llvm::FixedVectorType::get(Int16Ty, 8);
13916 break;
13917 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s32:
13918 Param0 = 0;
13919 Param1 = 0;
13920 Param2 = llvm::FixedVectorType::get(Int32Ty, 4);
13921 break;
13922 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_s8:
13923 Param0 = 0;
13924 Param1 = 0;
13925 Param2 = llvm::FixedVectorType::get(Int8Ty, 16);
13926 break;
13927 }
13928 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
13929 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
13930 Value *Val2 = EmitScalarExpr(E->getArg(0));
13931 Value *Val3 = EmitScalarExpr(E->getArg(1));
13932 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq, {Param2}), {Val0, Val1, Val2, Val3});
13933}
13934case ARM::BI__builtin_arm_mve_vmladavaq_p_s16:
13935case ARM::BI__builtin_arm_mve_vmladavaq_p_s32:
13936case ARM::BI__builtin_arm_mve_vmladavaq_p_s8:
13937case ARM::BI__builtin_arm_mve_vmladavaq_p_u16:
13938case ARM::BI__builtin_arm_mve_vmladavaq_p_u32:
13939case ARM::BI__builtin_arm_mve_vmladavaq_p_u8:
13940case ARM::BI__builtin_arm_mve_vmladavaxq_p_s16:
13941case ARM::BI__builtin_arm_mve_vmladavaxq_p_s32:
13942case ARM::BI__builtin_arm_mve_vmladavaxq_p_s8:
13943case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s16:
13944case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s32:
13945case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s8:
13946case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s16:
13947case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s32:
13948case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s8: {
13949 uint32_t Param0;
13950 uint32_t Param1;
13951 uint32_t Param2;
13952 llvm::Type * Param3;
13953 llvm::Type * Param4;
13954 switch (BuiltinID) {
13955 case ARM::BI__builtin_arm_mve_vmladavaq_p_s16:
13956 Param0 = 0;
13957 Param1 = 0;
13958 Param2 = 0;
13959 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13960 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
13961 break;
13962 case ARM::BI__builtin_arm_mve_vmladavaq_p_s32:
13963 Param0 = 0;
13964 Param1 = 0;
13965 Param2 = 0;
13966 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13967 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
13968 break;
13969 case ARM::BI__builtin_arm_mve_vmladavaq_p_s8:
13970 Param0 = 0;
13971 Param1 = 0;
13972 Param2 = 0;
13973 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13974 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
13975 break;
13976 case ARM::BI__builtin_arm_mve_vmladavaq_p_u16:
13977 Param0 = 1;
13978 Param1 = 0;
13979 Param2 = 0;
13980 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
13981 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
13982 break;
13983 case ARM::BI__builtin_arm_mve_vmladavaq_p_u32:
13984 Param0 = 1;
13985 Param1 = 0;
13986 Param2 = 0;
13987 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
13988 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
13989 break;
13990 case ARM::BI__builtin_arm_mve_vmladavaq_p_u8:
13991 Param0 = 1;
13992 Param1 = 0;
13993 Param2 = 0;
13994 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
13995 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
13996 break;
13997 case ARM::BI__builtin_arm_mve_vmladavaxq_p_s16:
13998 Param0 = 0;
13999 Param1 = 0;
14000 Param2 = 1;
14001 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14002 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14003 break;
14004 case ARM::BI__builtin_arm_mve_vmladavaxq_p_s32:
14005 Param0 = 0;
14006 Param1 = 0;
14007 Param2 = 1;
14008 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14009 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14010 break;
14011 case ARM::BI__builtin_arm_mve_vmladavaxq_p_s8:
14012 Param0 = 0;
14013 Param1 = 0;
14014 Param2 = 1;
14015 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14016 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14017 break;
14018 case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s16:
14019 Param0 = 0;
14020 Param1 = 1;
14021 Param2 = 0;
14022 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14023 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14024 break;
14025 case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s32:
14026 Param0 = 0;
14027 Param1 = 1;
14028 Param2 = 0;
14029 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14030 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14031 break;
14032 case ARM::BI__builtin_arm_mve_vmlsdavaq_p_s8:
14033 Param0 = 0;
14034 Param1 = 1;
14035 Param2 = 0;
14036 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14037 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14038 break;
14039 case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s16:
14040 Param0 = 0;
14041 Param1 = 1;
14042 Param2 = 1;
14043 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14044 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14045 break;
14046 case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s32:
14047 Param0 = 0;
14048 Param1 = 1;
14049 Param2 = 1;
14050 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14051 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14052 break;
14053 case ARM::BI__builtin_arm_mve_vmlsdavaxq_p_s8:
14054 Param0 = 0;
14055 Param1 = 1;
14056 Param2 = 1;
14057 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14058 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14059 break;
14060 }
14061 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
14062 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
14063 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
14064 Value *Val3 = EmitScalarExpr(E->getArg(0));
14065 Value *Val4 = EmitScalarExpr(E->getArg(1));
14066 Value *Val5 = EmitScalarExpr(E->getArg(2));
14067 Value *Val6 = EmitScalarExpr(E->getArg(3));
14068 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
14069 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val7});
14070 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val3, Val4, Val5, Val8});
14071}
14072case ARM::BI__builtin_arm_mve_vmladavaq_s16:
14073case ARM::BI__builtin_arm_mve_vmladavaq_s32:
14074case ARM::BI__builtin_arm_mve_vmladavaq_s8:
14075case ARM::BI__builtin_arm_mve_vmladavaq_u16:
14076case ARM::BI__builtin_arm_mve_vmladavaq_u32:
14077case ARM::BI__builtin_arm_mve_vmladavaq_u8:
14078case ARM::BI__builtin_arm_mve_vmladavaxq_s16:
14079case ARM::BI__builtin_arm_mve_vmladavaxq_s32:
14080case ARM::BI__builtin_arm_mve_vmladavaxq_s8:
14081case ARM::BI__builtin_arm_mve_vmlsdavaq_s16:
14082case ARM::BI__builtin_arm_mve_vmlsdavaq_s32:
14083case ARM::BI__builtin_arm_mve_vmlsdavaq_s8:
14084case ARM::BI__builtin_arm_mve_vmlsdavaxq_s16:
14085case ARM::BI__builtin_arm_mve_vmlsdavaxq_s32:
14086case ARM::BI__builtin_arm_mve_vmlsdavaxq_s8: {
14087 uint32_t Param0;
14088 uint32_t Param1;
14089 uint32_t Param2;
14090 llvm::Type * Param3;
14091 switch (BuiltinID) {
14092 case ARM::BI__builtin_arm_mve_vmladavaq_s16:
14093 Param0 = 0;
14094 Param1 = 0;
14095 Param2 = 0;
14096 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14097 break;
14098 case ARM::BI__builtin_arm_mve_vmladavaq_s32:
14099 Param0 = 0;
14100 Param1 = 0;
14101 Param2 = 0;
14102 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14103 break;
14104 case ARM::BI__builtin_arm_mve_vmladavaq_s8:
14105 Param0 = 0;
14106 Param1 = 0;
14107 Param2 = 0;
14108 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14109 break;
14110 case ARM::BI__builtin_arm_mve_vmladavaq_u16:
14111 Param0 = 1;
14112 Param1 = 0;
14113 Param2 = 0;
14114 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14115 break;
14116 case ARM::BI__builtin_arm_mve_vmladavaq_u32:
14117 Param0 = 1;
14118 Param1 = 0;
14119 Param2 = 0;
14120 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14121 break;
14122 case ARM::BI__builtin_arm_mve_vmladavaq_u8:
14123 Param0 = 1;
14124 Param1 = 0;
14125 Param2 = 0;
14126 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14127 break;
14128 case ARM::BI__builtin_arm_mve_vmladavaxq_s16:
14129 Param0 = 0;
14130 Param1 = 0;
14131 Param2 = 1;
14132 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14133 break;
14134 case ARM::BI__builtin_arm_mve_vmladavaxq_s32:
14135 Param0 = 0;
14136 Param1 = 0;
14137 Param2 = 1;
14138 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14139 break;
14140 case ARM::BI__builtin_arm_mve_vmladavaxq_s8:
14141 Param0 = 0;
14142 Param1 = 0;
14143 Param2 = 1;
14144 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14145 break;
14146 case ARM::BI__builtin_arm_mve_vmlsdavaq_s16:
14147 Param0 = 0;
14148 Param1 = 1;
14149 Param2 = 0;
14150 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14151 break;
14152 case ARM::BI__builtin_arm_mve_vmlsdavaq_s32:
14153 Param0 = 0;
14154 Param1 = 1;
14155 Param2 = 0;
14156 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14157 break;
14158 case ARM::BI__builtin_arm_mve_vmlsdavaq_s8:
14159 Param0 = 0;
14160 Param1 = 1;
14161 Param2 = 0;
14162 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14163 break;
14164 case ARM::BI__builtin_arm_mve_vmlsdavaxq_s16:
14165 Param0 = 0;
14166 Param1 = 1;
14167 Param2 = 1;
14168 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14169 break;
14170 case ARM::BI__builtin_arm_mve_vmlsdavaxq_s32:
14171 Param0 = 0;
14172 Param1 = 1;
14173 Param2 = 1;
14174 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14175 break;
14176 case ARM::BI__builtin_arm_mve_vmlsdavaxq_s8:
14177 Param0 = 0;
14178 Param1 = 1;
14179 Param2 = 1;
14180 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14181 break;
14182 }
14183 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
14184 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
14185 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
14186 Value *Val3 = EmitScalarExpr(E->getArg(0));
14187 Value *Val4 = EmitScalarExpr(E->getArg(1));
14188 Value *Val5 = EmitScalarExpr(E->getArg(2));
14189 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava, {Param3}), {Val0, Val1, Val2, Val3, Val4, Val5});
14190}
14191case ARM::BI__builtin_arm_mve_vmladavq_p_s16:
14192case ARM::BI__builtin_arm_mve_vmladavq_p_s32:
14193case ARM::BI__builtin_arm_mve_vmladavq_p_s8:
14194case ARM::BI__builtin_arm_mve_vmladavq_p_u16:
14195case ARM::BI__builtin_arm_mve_vmladavq_p_u32:
14196case ARM::BI__builtin_arm_mve_vmladavq_p_u8:
14197case ARM::BI__builtin_arm_mve_vmladavxq_p_s16:
14198case ARM::BI__builtin_arm_mve_vmladavxq_p_s32:
14199case ARM::BI__builtin_arm_mve_vmladavxq_p_s8:
14200case ARM::BI__builtin_arm_mve_vmlsdavq_p_s16:
14201case ARM::BI__builtin_arm_mve_vmlsdavq_p_s32:
14202case ARM::BI__builtin_arm_mve_vmlsdavq_p_s8:
14203case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s16:
14204case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s32:
14205case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s8: {
14206 uint32_t Param0;
14207 uint32_t Param1;
14208 uint32_t Param2;
14209 llvm::Type * Param3;
14210 llvm::Type * Param4;
14211 switch (BuiltinID) {
14212 case ARM::BI__builtin_arm_mve_vmladavq_p_s16:
14213 Param0 = 0;
14214 Param1 = 0;
14215 Param2 = 0;
14216 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14217 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14218 break;
14219 case ARM::BI__builtin_arm_mve_vmladavq_p_s32:
14220 Param0 = 0;
14221 Param1 = 0;
14222 Param2 = 0;
14223 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14224 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14225 break;
14226 case ARM::BI__builtin_arm_mve_vmladavq_p_s8:
14227 Param0 = 0;
14228 Param1 = 0;
14229 Param2 = 0;
14230 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14231 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14232 break;
14233 case ARM::BI__builtin_arm_mve_vmladavq_p_u16:
14234 Param0 = 1;
14235 Param1 = 0;
14236 Param2 = 0;
14237 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14238 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14239 break;
14240 case ARM::BI__builtin_arm_mve_vmladavq_p_u32:
14241 Param0 = 1;
14242 Param1 = 0;
14243 Param2 = 0;
14244 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14245 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14246 break;
14247 case ARM::BI__builtin_arm_mve_vmladavq_p_u8:
14248 Param0 = 1;
14249 Param1 = 0;
14250 Param2 = 0;
14251 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14252 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14253 break;
14254 case ARM::BI__builtin_arm_mve_vmladavxq_p_s16:
14255 Param0 = 0;
14256 Param1 = 0;
14257 Param2 = 1;
14258 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14259 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14260 break;
14261 case ARM::BI__builtin_arm_mve_vmladavxq_p_s32:
14262 Param0 = 0;
14263 Param1 = 0;
14264 Param2 = 1;
14265 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14266 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14267 break;
14268 case ARM::BI__builtin_arm_mve_vmladavxq_p_s8:
14269 Param0 = 0;
14270 Param1 = 0;
14271 Param2 = 1;
14272 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14273 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14274 break;
14275 case ARM::BI__builtin_arm_mve_vmlsdavq_p_s16:
14276 Param0 = 0;
14277 Param1 = 1;
14278 Param2 = 0;
14279 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14280 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14281 break;
14282 case ARM::BI__builtin_arm_mve_vmlsdavq_p_s32:
14283 Param0 = 0;
14284 Param1 = 1;
14285 Param2 = 0;
14286 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14287 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14288 break;
14289 case ARM::BI__builtin_arm_mve_vmlsdavq_p_s8:
14290 Param0 = 0;
14291 Param1 = 1;
14292 Param2 = 0;
14293 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14294 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14295 break;
14296 case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s16:
14297 Param0 = 0;
14298 Param1 = 1;
14299 Param2 = 1;
14300 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14301 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14302 break;
14303 case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s32:
14304 Param0 = 0;
14305 Param1 = 1;
14306 Param2 = 1;
14307 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14308 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14309 break;
14310 case ARM::BI__builtin_arm_mve_vmlsdavxq_p_s8:
14311 Param0 = 0;
14312 Param1 = 1;
14313 Param2 = 1;
14314 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 16);
14315 Param4 = llvm::FixedVectorType::get(Int8Ty, 16);
14316 break;
14317 }
14318 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
14319 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
14320 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
14321 llvm::Type *Val3 = Int32Ty;
14322 Value *Val4 = llvm::Constant::getNullValue(Val3);
14323 Value *Val5 = EmitScalarExpr(E->getArg(0));
14324 Value *Val6 = EmitScalarExpr(E->getArg(1));
14325 Value *Val7 = EmitScalarExpr(E->getArg(2));
14326 Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
14327 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val8});
14328 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava_predicated, {Param4, Param3}), {Val0, Val1, Val2, Val4, Val5, Val6, Val9});
14329}
14330case ARM::BI__builtin_arm_mve_vmladavq_s16:
14331case ARM::BI__builtin_arm_mve_vmladavq_s32:
14332case ARM::BI__builtin_arm_mve_vmladavq_s8:
14333case ARM::BI__builtin_arm_mve_vmladavq_u16:
14334case ARM::BI__builtin_arm_mve_vmladavq_u32:
14335case ARM::BI__builtin_arm_mve_vmladavq_u8:
14336case ARM::BI__builtin_arm_mve_vmladavxq_s16:
14337case ARM::BI__builtin_arm_mve_vmladavxq_s32:
14338case ARM::BI__builtin_arm_mve_vmladavxq_s8:
14339case ARM::BI__builtin_arm_mve_vmlsdavq_s16:
14340case ARM::BI__builtin_arm_mve_vmlsdavq_s32:
14341case ARM::BI__builtin_arm_mve_vmlsdavq_s8:
14342case ARM::BI__builtin_arm_mve_vmlsdavxq_s16:
14343case ARM::BI__builtin_arm_mve_vmlsdavxq_s32:
14344case ARM::BI__builtin_arm_mve_vmlsdavxq_s8: {
14345 uint32_t Param0;
14346 uint32_t Param1;
14347 uint32_t Param2;
14348 llvm::Type * Param3;
14349 switch (BuiltinID) {
14350 case ARM::BI__builtin_arm_mve_vmladavq_s16:
14351 Param0 = 0;
14352 Param1 = 0;
14353 Param2 = 0;
14354 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14355 break;
14356 case ARM::BI__builtin_arm_mve_vmladavq_s32:
14357 Param0 = 0;
14358 Param1 = 0;
14359 Param2 = 0;
14360 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14361 break;
14362 case ARM::BI__builtin_arm_mve_vmladavq_s8:
14363 Param0 = 0;
14364 Param1 = 0;
14365 Param2 = 0;
14366 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14367 break;
14368 case ARM::BI__builtin_arm_mve_vmladavq_u16:
14369 Param0 = 1;
14370 Param1 = 0;
14371 Param2 = 0;
14372 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14373 break;
14374 case ARM::BI__builtin_arm_mve_vmladavq_u32:
14375 Param0 = 1;
14376 Param1 = 0;
14377 Param2 = 0;
14378 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14379 break;
14380 case ARM::BI__builtin_arm_mve_vmladavq_u8:
14381 Param0 = 1;
14382 Param1 = 0;
14383 Param2 = 0;
14384 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14385 break;
14386 case ARM::BI__builtin_arm_mve_vmladavxq_s16:
14387 Param0 = 0;
14388 Param1 = 0;
14389 Param2 = 1;
14390 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14391 break;
14392 case ARM::BI__builtin_arm_mve_vmladavxq_s32:
14393 Param0 = 0;
14394 Param1 = 0;
14395 Param2 = 1;
14396 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14397 break;
14398 case ARM::BI__builtin_arm_mve_vmladavxq_s8:
14399 Param0 = 0;
14400 Param1 = 0;
14401 Param2 = 1;
14402 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14403 break;
14404 case ARM::BI__builtin_arm_mve_vmlsdavq_s16:
14405 Param0 = 0;
14406 Param1 = 1;
14407 Param2 = 0;
14408 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14409 break;
14410 case ARM::BI__builtin_arm_mve_vmlsdavq_s32:
14411 Param0 = 0;
14412 Param1 = 1;
14413 Param2 = 0;
14414 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14415 break;
14416 case ARM::BI__builtin_arm_mve_vmlsdavq_s8:
14417 Param0 = 0;
14418 Param1 = 1;
14419 Param2 = 0;
14420 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14421 break;
14422 case ARM::BI__builtin_arm_mve_vmlsdavxq_s16:
14423 Param0 = 0;
14424 Param1 = 1;
14425 Param2 = 1;
14426 Param3 = llvm::FixedVectorType::get(Int16Ty, 8);
14427 break;
14428 case ARM::BI__builtin_arm_mve_vmlsdavxq_s32:
14429 Param0 = 0;
14430 Param1 = 1;
14431 Param2 = 1;
14432 Param3 = llvm::FixedVectorType::get(Int32Ty, 4);
14433 break;
14434 case ARM::BI__builtin_arm_mve_vmlsdavxq_s8:
14435 Param0 = 0;
14436 Param1 = 1;
14437 Param2 = 1;
14438 Param3 = llvm::FixedVectorType::get(Int8Ty, 16);
14439 break;
14440 }
14441 Value *Val0 = llvm::ConstantInt::get(Int32Ty, Param0);
14442 Value *Val1 = llvm::ConstantInt::get(Int32Ty, Param1);
14443 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param2);
14444 llvm::Type *Val3 = Int32Ty;
14445 Value *Val4 = llvm::Constant::getNullValue(Val3);
14446 Value *Val5 = EmitScalarExpr(E->getArg(0));
14447 Value *Val6 = EmitScalarExpr(E->getArg(1));
14448 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmldava, {Param3}), {Val0, Val1, Val2, Val4, Val5, Val6});
14449}
14450case ARM::BI__builtin_arm_mve_vmlaldavq_s16:
14451case ARM::BI__builtin_arm_mve_vmlaldavq_s32:
14452case ARM::BI__builtin_arm_mve_vmlaldavq_u16:
14453case ARM::BI__builtin_arm_mve_vmlaldavq_u32:
14454case ARM::BI__builtin_arm_mve_vmlaldavxq_s16:
14455case ARM::BI__builtin_arm_mve_vmlaldavxq_s32:
14456case ARM::BI__builtin_arm_mve_vmlsldavq_s16:
14457case ARM::BI__builtin_arm_mve_vmlsldavq_s32:
14458case ARM::BI__builtin_arm_mve_vmlsldavxq_s16:
14459case ARM::BI__builtin_arm_mve_vmlsldavxq_s32:
14460case ARM::BI__builtin_arm_mve_vrmlaldavhq_s32:
14461case ARM::BI__builtin_arm_mve_vrmlaldavhq_u32:
14462case ARM::BI__builtin_arm_mve_vrmlaldavhxq_s32:
14463case ARM::BI__builtin_arm_mve_vrmlsldavhq_s32:
14464case ARM::BI__builtin_arm_mve_vrmlsldavhxq_s32: {
14465 uint32_t Param0;
14466 uint32_t Param1;
14467 uint32_t Param2;
14468 Intrinsic::ID Param3;
14469 llvm::Type * Param4;
14470 switch (BuiltinID) {
14471 case ARM::BI__builtin_arm_mve_vmlaldavq_s16:
14472 Param0 = 0;
14473 Param1 = 0;
14474 Param2 = 0;
14475 Param3 = Intrinsic::arm_mve_vmlldava;
14476 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14477 break;
14478 case ARM::BI__builtin_arm_mve_vmlaldavq_s32:
14479 Param0 = 0;
14480 Param1 = 0;
14481 Param2 = 0;
14482 Param3 = Intrinsic::arm_mve_vmlldava;
14483 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14484 break;
14485 case ARM::BI__builtin_arm_mve_vmlaldavq_u16:
14486 Param0 = 1;
14487 Param1 = 0;
14488 Param2 = 0;
14489 Param3 = Intrinsic::arm_mve_vmlldava;
14490 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14491 break;
14492 case ARM::BI__builtin_arm_mve_vmlaldavq_u32:
14493 Param0 = 1;
14494 Param1 = 0;
14495 Param2 = 0;
14496 Param3 = Intrinsic::arm_mve_vmlldava;
14497 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14498 break;
14499 case ARM::BI__builtin_arm_mve_vmlaldavxq_s16:
14500 Param0 = 0;
14501 Param1 = 0;
14502 Param2 = 1;
14503 Param3 = Intrinsic::arm_mve_vmlldava;
14504 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14505 break;
14506 case ARM::BI__builtin_arm_mve_vmlaldavxq_s32:
14507 Param0 = 0;
14508 Param1 = 0;
14509 Param2 = 1;
14510 Param3 = Intrinsic::arm_mve_vmlldava;
14511 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14512 break;
14513 case ARM::BI__builtin_arm_mve_vmlsldavq_s16:
14514 Param0 = 0;
14515 Param1 = 1;
14516 Param2 = 0;
14517 Param3 = Intrinsic::arm_mve_vmlldava;
14518 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14519 break;
14520 case ARM::BI__builtin_arm_mve_vmlsldavq_s32:
14521 Param0 = 0;
14522 Param1 = 1;
14523 Param2 = 0;
14524 Param3 = Intrinsic::arm_mve_vmlldava;
14525 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14526 break;
14527 case ARM::BI__builtin_arm_mve_vmlsldavxq_s16:
14528 Param0 = 0;
14529 Param1 = 1;
14530 Param2 = 1;
14531 Param3 = Intrinsic::arm_mve_vmlldava;
14532 Param4 = llvm::FixedVectorType::get(Int16Ty, 8);
14533 break;
14534 case ARM::BI__builtin_arm_mve_vmlsldavxq_s32:
14535 Param0 = 0;
14536 Param1 = 1;
14537 Param2 = 1;
14538 Param3 = Intrinsic::arm_mve_vmlldava;
14539 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14540 break;
14541 case ARM::BI__builtin_arm_mve_vrmlaldavhq_s32:
14542 Param0 = 0;
14543 Param1 = 0;
14544 Param2 = 0;
14545 Param3 = Intrinsic::arm_mve_vrmlldavha;
14546 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14547 break;
14548 case ARM::BI__builtin_arm_mve_vrmlaldavhq_u32:
14549 Param0 = 1;
14550 Param1 = 0;
14551 Param2 = 0;
14552 Param3 = Intrinsic::arm_mve_vrmlldavha;
14553 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14554 break;
14555 case ARM::BI__builtin_arm_mve_vrmlaldavhxq_s32:
14556 Param0 = 0;
14557 Param1 = 0;
14558 Param2 = 1;
14559 Param3 = Intrinsic::arm_mve_vrmlldavha;
14560 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14561 break;
14562 case ARM::BI__builtin_arm_mve_vrmlsldavhq_s32:
14563 Param0 = 0;
14564 Param1 = 1;
14565 Param2 = 0;
14566 Param3 = Intrinsic::arm_mve_vrmlldavha;
14567 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14568 break;
14569 case ARM::BI__builtin_arm_mve_vrmlsldavhxq_s32:
14570 Param0 = 0;
14571 Param1 = 1;
14572 Param2 = 1;
14573 Param3 = Intrinsic::arm_mve_vrmlldavha;
14574 Param4 = llvm::FixedVectorType::get(Int32Ty, 4);
14575 break;
14576 }
14577 llvm::Type *Val0 = Int32Ty;
14578 Value *Val1 = llvm::Constant::getNullValue(Val0);
14579 llvm::Type *Val2 = Int32Ty;
14580 Value *Val3 = llvm::Constant::getNullValue(Val2);
14581 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
14582 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
14583 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param2);
14584 Value *Val7 = EmitScalarExpr(E->getArg(0));
14585 Value *Val8 = EmitScalarExpr(E->getArg(1));
14586 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param3, {Param4}), {Val4, Val5, Val6, Val3, Val1, Val7, Val8});
14587 Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
14588 Value *Val11 = Builder.CreateIntCast(Val10, Int64Ty, false);
14589 Value *Val12 = llvm::ConstantInt::get(Int64Ty, 32);
14590 Value *Val13 = Builder.CreateShl(Val11, Val12);
14591 Value *Val14 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
14592 Value *Val15 = Builder.CreateIntCast(Val14, Int64Ty, false);
14593 return Builder.CreateOr(Val13, Val15);
14594}
14595case ARM::BI__builtin_arm_mve_vmlaldavq_p_s16:
14596case ARM::BI__builtin_arm_mve_vmlaldavq_p_s32:
14597case ARM::BI__builtin_arm_mve_vmlaldavq_p_u16:
14598case ARM::BI__builtin_arm_mve_vmlaldavq_p_u32:
14599case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s16:
14600case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s32:
14601case ARM::BI__builtin_arm_mve_vmlsldavq_p_s16:
14602case ARM::BI__builtin_arm_mve_vmlsldavq_p_s32:
14603case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s16:
14604case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s32:
14605case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_s32:
14606case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_u32:
14607case ARM::BI__builtin_arm_mve_vrmlaldavhxq_p_s32:
14608case ARM::BI__builtin_arm_mve_vrmlsldavhq_p_s32:
14609case ARM::BI__builtin_arm_mve_vrmlsldavhxq_p_s32: {
14610 uint32_t Param0;
14611 uint32_t Param1;
14612 uint32_t Param2;
14613 llvm::Type * Param3;
14614 Intrinsic::ID Param4;
14615 llvm::Type * Param5;
14616 switch (BuiltinID) {
14617 case ARM::BI__builtin_arm_mve_vmlaldavq_p_s16:
14618 Param0 = 0;
14619 Param1 = 0;
14620 Param2 = 0;
14621 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14622 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14623 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
14624 break;
14625 case ARM::BI__builtin_arm_mve_vmlaldavq_p_s32:
14626 Param0 = 0;
14627 Param1 = 0;
14628 Param2 = 0;
14629 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14630 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14631 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14632 break;
14633 case ARM::BI__builtin_arm_mve_vmlaldavq_p_u16:
14634 Param0 = 1;
14635 Param1 = 0;
14636 Param2 = 0;
14637 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14638 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14639 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
14640 break;
14641 case ARM::BI__builtin_arm_mve_vmlaldavq_p_u32:
14642 Param0 = 1;
14643 Param1 = 0;
14644 Param2 = 0;
14645 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14646 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14647 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14648 break;
14649 case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s16:
14650 Param0 = 0;
14651 Param1 = 0;
14652 Param2 = 1;
14653 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14654 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14655 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
14656 break;
14657 case ARM::BI__builtin_arm_mve_vmlaldavxq_p_s32:
14658 Param0 = 0;
14659 Param1 = 0;
14660 Param2 = 1;
14661 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14662 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14663 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14664 break;
14665 case ARM::BI__builtin_arm_mve_vmlsldavq_p_s16:
14666 Param0 = 0;
14667 Param1 = 1;
14668 Param2 = 0;
14669 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14670 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14671 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
14672 break;
14673 case ARM::BI__builtin_arm_mve_vmlsldavq_p_s32:
14674 Param0 = 0;
14675 Param1 = 1;
14676 Param2 = 0;
14677 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14678 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14679 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14680 break;
14681 case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s16:
14682 Param0 = 0;
14683 Param1 = 1;
14684 Param2 = 1;
14685 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 8);
14686 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14687 Param5 = llvm::FixedVectorType::get(Int16Ty, 8);
14688 break;
14689 case ARM::BI__builtin_arm_mve_vmlsldavxq_p_s32:
14690 Param0 = 0;
14691 Param1 = 1;
14692 Param2 = 1;
14693 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14694 Param4 = Intrinsic::arm_mve_vmlldava_predicated;
14695 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14696 break;
14697 case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_s32:
14698 Param0 = 0;
14699 Param1 = 0;
14700 Param2 = 0;
14701 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14702 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
14703 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14704 break;
14705 case ARM::BI__builtin_arm_mve_vrmlaldavhq_p_u32:
14706 Param0 = 1;
14707 Param1 = 0;
14708 Param2 = 0;
14709 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14710 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
14711 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14712 break;
14713 case ARM::BI__builtin_arm_mve_vrmlaldavhxq_p_s32:
14714 Param0 = 0;
14715 Param1 = 0;
14716 Param2 = 1;
14717 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14718 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
14719 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14720 break;
14721 case ARM::BI__builtin_arm_mve_vrmlsldavhq_p_s32:
14722 Param0 = 0;
14723 Param1 = 1;
14724 Param2 = 0;
14725 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14726 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
14727 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14728 break;
14729 case ARM::BI__builtin_arm_mve_vrmlsldavhxq_p_s32:
14730 Param0 = 0;
14731 Param1 = 1;
14732 Param2 = 1;
14733 Param3 = llvm::FixedVectorType::get(Builder.getInt1Ty(), 4);
14734 Param4 = Intrinsic::arm_mve_vrmlldavha_predicated;
14735 Param5 = llvm::FixedVectorType::get(Int32Ty, 4);
14736 break;
14737 }
14738 llvm::Type *Val0 = Int32Ty;
14739 Value *Val1 = llvm::Constant::getNullValue(Val0);
14740 llvm::Type *Val2 = Int32Ty;
14741 Value *Val3 = llvm::Constant::getNullValue(Val2);
14742 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
14743 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
14744 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param2);
14745 Value *Val7 = EmitScalarExpr(E->getArg(0));
14746 Value *Val8 = EmitScalarExpr(E->getArg(1));
14747 Value *Val9 = EmitScalarExpr(E->getArg(2));
14748 Value *Val10 = Builder.CreateIntCast(Val9, Int32Ty, false);
14749 Value *Val11 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {Param3}), {Val10});
14750 Value *Val12 = Builder.CreateCall(CGM.getIntrinsic(Param4, {Param5, Param3}), {Val4, Val5, Val6, Val3, Val1, Val7, Val8, Val11});
14751 Value *Val13 = Builder.CreateExtractValue(Val12, static_cast<unsigned>(1));
14752 Value *Val14 = Builder.CreateIntCast(Val13, Int64Ty, false);
14753 Value *Val15 = llvm::ConstantInt::get(Int64Ty, 32);
14754 Value *Val16 = Builder.CreateShl(Val14, Val15);
14755 Value *Val17 = Builder.CreateExtractValue(Val12, static_cast<unsigned>(0));
14756 Value *Val18 = Builder.CreateIntCast(Val17, Int64Ty, false);
14757 return Builder.CreateOr(Val16, Val18);
14758}
14759case ARM::BI__builtin_arm_mve_vaddq_x_n_f32:
14760case ARM::BI__builtin_arm_mve_vmulq_x_n_f32:
14761case ARM::BI__builtin_arm_mve_vsubq_x_n_f32: {
14762 Intrinsic::ID Param0;
14763 switch (BuiltinID) {
14764 case ARM::BI__builtin_arm_mve_vaddq_x_n_f32:
14765 Param0 = Intrinsic::arm_mve_add_predicated;
14766 break;
14767 case ARM::BI__builtin_arm_mve_vmulq_x_n_f32:
14768 Param0 = Intrinsic::arm_mve_mul_predicated;
14769 break;
14770 case ARM::BI__builtin_arm_mve_vsubq_x_n_f32:
14771 Param0 = Intrinsic::arm_mve_sub_predicated;
14772 break;
14773 }
14774 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14775 Value *Val1 = UndefValue::get(Val0);
14776 Value *Val2 = EmitScalarExpr(E->getArg(0));
14777 Value *Val3 = EmitScalarExpr(E->getArg(1));
14778 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
14779 Value *Val5 = EmitScalarExpr(E->getArg(2));
14780 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
14781 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
14782 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val4, Val7, Val1});
14783}
14784case ARM::BI__builtin_arm_mve_vabsq_x_f32:
14785case ARM::BI__builtin_arm_mve_vnegq_x_f32:
14786case ARM::BI__builtin_arm_mve_vrndaq_x_f32:
14787case ARM::BI__builtin_arm_mve_vrndmq_x_f32:
14788case ARM::BI__builtin_arm_mve_vrndnq_x_f32:
14789case ARM::BI__builtin_arm_mve_vrndpq_x_f32:
14790case ARM::BI__builtin_arm_mve_vrndq_x_f32:
14791case ARM::BI__builtin_arm_mve_vrndxq_x_f32: {
14792 Intrinsic::ID Param0;
14793 switch (BuiltinID) {
14794 case ARM::BI__builtin_arm_mve_vabsq_x_f32:
14795 Param0 = Intrinsic::arm_mve_abs_predicated;
14796 break;
14797 case ARM::BI__builtin_arm_mve_vnegq_x_f32:
14798 Param0 = Intrinsic::arm_mve_neg_predicated;
14799 break;
14800 case ARM::BI__builtin_arm_mve_vrndaq_x_f32:
14801 Param0 = Intrinsic::arm_mve_vrinta_predicated;
14802 break;
14803 case ARM::BI__builtin_arm_mve_vrndmq_x_f32:
14804 Param0 = Intrinsic::arm_mve_vrintm_predicated;
14805 break;
14806 case ARM::BI__builtin_arm_mve_vrndnq_x_f32:
14807 Param0 = Intrinsic::arm_mve_vrintn_predicated;
14808 break;
14809 case ARM::BI__builtin_arm_mve_vrndpq_x_f32:
14810 Param0 = Intrinsic::arm_mve_vrintp_predicated;
14811 break;
14812 case ARM::BI__builtin_arm_mve_vrndq_x_f32:
14813 Param0 = Intrinsic::arm_mve_vrintz_predicated;
14814 break;
14815 case ARM::BI__builtin_arm_mve_vrndxq_x_f32:
14816 Param0 = Intrinsic::arm_mve_vrintx_predicated;
14817 break;
14818 }
14819 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14820 Value *Val1 = UndefValue::get(Val0);
14821 Value *Val2 = EmitScalarExpr(E->getArg(0));
14822 Value *Val3 = EmitScalarExpr(E->getArg(1));
14823 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
14824 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
14825 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val1});
14826}
14827case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f32: {
14828 Intrinsic::ID Param0;
14829 switch (BuiltinID) {
14830 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f32:
14831 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
14832 break;
14833 }
14834 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14835 Value *Val1 = UndefValue::get(Val0);
14836 Value *Val2 = EmitScalarExpr(E->getArg(0));
14837 Value *Val3 = EmitScalarExpr(E->getArg(1));
14838 Value *Val4 = EmitScalarExpr(E->getArg(2));
14839 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
14840 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
14841 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
14842}
14843case ARM::BI__builtin_arm_mve_vaddq_x_f32:
14844case ARM::BI__builtin_arm_mve_vmulq_x_f32:
14845case ARM::BI__builtin_arm_mve_vsubq_x_f32: {
14846 Intrinsic::ID Param0;
14847 switch (BuiltinID) {
14848 case ARM::BI__builtin_arm_mve_vaddq_x_f32:
14849 Param0 = Intrinsic::arm_mve_add_predicated;
14850 break;
14851 case ARM::BI__builtin_arm_mve_vmulq_x_f32:
14852 Param0 = Intrinsic::arm_mve_mul_predicated;
14853 break;
14854 case ARM::BI__builtin_arm_mve_vsubq_x_f32:
14855 Param0 = Intrinsic::arm_mve_sub_predicated;
14856 break;
14857 }
14858 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14859 Value *Val1 = UndefValue::get(Val0);
14860 Value *Val2 = EmitScalarExpr(E->getArg(0));
14861 Value *Val3 = EmitScalarExpr(E->getArg(1));
14862 Value *Val4 = EmitScalarExpr(E->getArg(2));
14863 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
14864 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
14865 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
14866}
14867case ARM::BI__builtin_arm_mve_vabdq_x_f32:
14868case ARM::BI__builtin_arm_mve_vmaxnmq_x_f32:
14869case ARM::BI__builtin_arm_mve_vminnmq_x_f32: {
14870 Intrinsic::ID Param0;
14871 switch (BuiltinID) {
14872 case ARM::BI__builtin_arm_mve_vabdq_x_f32:
14873 Param0 = Intrinsic::arm_mve_abd_predicated;
14874 break;
14875 case ARM::BI__builtin_arm_mve_vmaxnmq_x_f32:
14876 Param0 = Intrinsic::arm_mve_max_predicated;
14877 break;
14878 case ARM::BI__builtin_arm_mve_vminnmq_x_f32:
14879 Param0 = Intrinsic::arm_mve_min_predicated;
14880 break;
14881 }
14882 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14883 Value *Val1 = UndefValue::get(Val0);
14884 Value *Val2 = EmitScalarExpr(E->getArg(0));
14885 Value *Val3 = EmitScalarExpr(E->getArg(1));
14886 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
14887 Value *Val5 = EmitScalarExpr(E->getArg(2));
14888 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
14889 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
14890 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
14891}
14892case ARM::BI__builtin_arm_mve_vrev64q_x_f32: {
14893 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14894 Value *Val1 = UndefValue::get(Val0);
14895 Value *Val2 = EmitScalarExpr(E->getArg(0));
14896 Value *Val3 = llvm::ConstantInt::get(Int32Ty, 64);
14897 Value *Val4 = EmitScalarExpr(E->getArg(1));
14898 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
14899 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
14900 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
14901}
14902case ARM::BI__builtin_arm_mve_vcvtq_x_f32_s32:
14903case ARM::BI__builtin_arm_mve_vcvtq_x_f32_u32: {
14904 uint32_t Param0;
14905 switch (BuiltinID) {
14906 case ARM::BI__builtin_arm_mve_vcvtq_x_f32_s32:
14907 Param0 = 0;
14908 break;
14909 case ARM::BI__builtin_arm_mve_vcvtq_x_f32_u32:
14910 Param0 = 1;
14911 break;
14912 }
14913 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14914 Value *Val1 = UndefValue::get(Val0);
14915 Value *Val2 = EmitScalarExpr(E->getArg(0));
14916 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
14917 Value *Val4 = EmitScalarExpr(E->getArg(1));
14918 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
14919 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
14920 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
14921}
14922case ARM::BI__builtin_arm_mve_vcvtbq_x_f32_f16:
14923case ARM::BI__builtin_arm_mve_vcvttq_x_f32_f16: {
14924 uint32_t Param0;
14925 switch (BuiltinID) {
14926 case ARM::BI__builtin_arm_mve_vcvtbq_x_f32_f16:
14927 Param0 = 0;
14928 break;
14929 case ARM::BI__builtin_arm_mve_vcvttq_x_f32_f16:
14930 Param0 = 1;
14931 break;
14932 }
14933 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14934 Value *Val1 = UndefValue::get(Val0);
14935 Value *Val2 = EmitScalarExpr(E->getArg(0));
14936 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
14937 Value *Val4 = EmitScalarExpr(E->getArg(1));
14938 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
14939 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
14940 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_widen_predicated), {Val1, Val2, Val3, Val6});
14941}
14942case ARM::BI__builtin_arm_mve_vandq_x_f32:
14943case ARM::BI__builtin_arm_mve_vbicq_x_f32:
14944case ARM::BI__builtin_arm_mve_veorq_x_f32:
14945case ARM::BI__builtin_arm_mve_vornq_x_f32:
14946case ARM::BI__builtin_arm_mve_vorrq_x_f32: {
14947 Intrinsic::ID Param0;
14948 switch (BuiltinID) {
14949 case ARM::BI__builtin_arm_mve_vandq_x_f32:
14950 Param0 = Intrinsic::arm_mve_and_predicated;
14951 break;
14952 case ARM::BI__builtin_arm_mve_vbicq_x_f32:
14953 Param0 = Intrinsic::arm_mve_bic_predicated;
14954 break;
14955 case ARM::BI__builtin_arm_mve_veorq_x_f32:
14956 Param0 = Intrinsic::arm_mve_eor_predicated;
14957 break;
14958 case ARM::BI__builtin_arm_mve_vornq_x_f32:
14959 Param0 = Intrinsic::arm_mve_orn_predicated;
14960 break;
14961 case ARM::BI__builtin_arm_mve_vorrq_x_f32:
14962 Param0 = Intrinsic::arm_mve_orr_predicated;
14963 break;
14964 }
14965 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14966 Value *Val1 = UndefValue::get(Val0);
14967 Value *Val2 = EmitScalarExpr(E->getArg(0));
14968 llvm::Type *Val3 = llvm::FixedVectorType::get(Int32Ty, 4);
14969 Value *Val4 = Builder.CreateBitCast(Val2, Val3);
14970 Value *Val5 = EmitScalarExpr(E->getArg(1));
14971 llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
14972 Value *Val7 = Builder.CreateBitCast(Val5, Val6);
14973 Value *Val8 = EmitScalarExpr(E->getArg(2));
14974 Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
14975 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val9});
14976 llvm::Type *Val11 = llvm::FixedVectorType::get(Int32Ty, 4);
14977 Value *Val12 = Builder.CreateBitCast(Val1, Val11);
14978 Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4, Val7, Val10, Val12});
14979 llvm::Type *Val14 = llvm::FixedVectorType::get(FloatTy, 4);
14980 return Builder.CreateBitCast(Val13, Val14);
14981}
14982case ARM::BI__builtin_arm_mve_vdupq_x_n_f32: {
14983 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
14984 Value *Val1 = UndefValue::get(Val0);
14985 Value *Val2 = EmitScalarExpr(E->getArg(1));
14986 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
14987 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
14988 Value *Val5 = EmitScalarExpr(E->getArg(0));
14989 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
14990 return Builder.CreateSelect(Val4, Val6, Val1);
14991}
14992case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f32:
14993case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f32: {
14994 uint32_t Param0;
14995 switch (BuiltinID) {
14996 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f32:
14997 Param0 = 1;
14998 break;
14999 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f32:
15000 Param0 = 0;
15001 break;
15002 }
15003 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
15004 Value *Val1 = UndefValue::get(Val0);
15005 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
15006 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15007 Value *Val4 = EmitScalarExpr(E->getArg(0));
15008 Value *Val5 = EmitScalarExpr(E->getArg(1));
15009 Value *Val6 = EmitScalarExpr(E->getArg(2));
15010 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
15011 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
15012 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val1, Val4, Val5, Val8});
15013}
15014case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f32:
15015case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f32:
15016case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f32:
15017case ARM::BI__builtin_arm_mve_vcmulq_x_f32: {
15018 uint32_t Param0;
15019 switch (BuiltinID) {
15020 case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f32:
15021 Param0 = 2;
15022 break;
15023 case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f32:
15024 Param0 = 3;
15025 break;
15026 case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f32:
15027 Param0 = 1;
15028 break;
15029 case ARM::BI__builtin_arm_mve_vcmulq_x_f32:
15030 Param0 = 0;
15031 break;
15032 }
15033 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
15034 Value *Val1 = UndefValue::get(Val0);
15035 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
15036 Value *Val3 = EmitScalarExpr(E->getArg(0));
15037 Value *Val4 = EmitScalarExpr(E->getArg(1));
15038 Value *Val5 = EmitScalarExpr(E->getArg(2));
15039 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15040 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
15041 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcmulq_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val4, Val7});
15042}
15043case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_s32:
15044case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_u32: {
15045 uint32_t Param0;
15046 switch (BuiltinID) {
15047 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_s32:
15048 Param0 = 0;
15049 break;
15050 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f32_u32:
15051 Param0 = 1;
15052 break;
15053 }
15054 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
15055 Value *Val1 = UndefValue::get(Val0);
15056 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
15057 Value *Val3 = EmitScalarExpr(E->getArg(0));
15058 Value *Val4 = EmitScalarExpr(E->getArg(1));
15059 Value *Val5 = EmitScalarExpr(E->getArg(2));
15060 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15061 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
15062 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val4, Val7});
15063}
15064case ARM::BI__builtin_arm_mve_vuninitializedq_f32:
15065case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_f32: {
15066 llvm::Type *Val0 = llvm::FixedVectorType::get(FloatTy, 4);
15067 return UndefValue::get(Val0);
15068}
15069case ARM::BI__builtin_arm_mve_vaddq_x_n_f16:
15070case ARM::BI__builtin_arm_mve_vmulq_x_n_f16:
15071case ARM::BI__builtin_arm_mve_vsubq_x_n_f16: {
15072 Intrinsic::ID Param0;
15073 switch (BuiltinID) {
15074 case ARM::BI__builtin_arm_mve_vaddq_x_n_f16:
15075 Param0 = Intrinsic::arm_mve_add_predicated;
15076 break;
15077 case ARM::BI__builtin_arm_mve_vmulq_x_n_f16:
15078 Param0 = Intrinsic::arm_mve_mul_predicated;
15079 break;
15080 case ARM::BI__builtin_arm_mve_vsubq_x_n_f16:
15081 Param0 = Intrinsic::arm_mve_sub_predicated;
15082 break;
15083 }
15084 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15085 Value *Val1 = UndefValue::get(Val0);
15086 Value *Val2 = EmitScalarExpr(E->getArg(0));
15087 Value *Val3 = EmitScalarExpr(E->getArg(1));
15088 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
15089 Value *Val5 = EmitScalarExpr(E->getArg(2));
15090 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15091 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15092 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val4, Val7, Val1});
15093}
15094case ARM::BI__builtin_arm_mve_vabsq_x_f16:
15095case ARM::BI__builtin_arm_mve_vnegq_x_f16:
15096case ARM::BI__builtin_arm_mve_vrndaq_x_f16:
15097case ARM::BI__builtin_arm_mve_vrndmq_x_f16:
15098case ARM::BI__builtin_arm_mve_vrndnq_x_f16:
15099case ARM::BI__builtin_arm_mve_vrndpq_x_f16:
15100case ARM::BI__builtin_arm_mve_vrndq_x_f16:
15101case ARM::BI__builtin_arm_mve_vrndxq_x_f16: {
15102 Intrinsic::ID Param0;
15103 switch (BuiltinID) {
15104 case ARM::BI__builtin_arm_mve_vabsq_x_f16:
15105 Param0 = Intrinsic::arm_mve_abs_predicated;
15106 break;
15107 case ARM::BI__builtin_arm_mve_vnegq_x_f16:
15108 Param0 = Intrinsic::arm_mve_neg_predicated;
15109 break;
15110 case ARM::BI__builtin_arm_mve_vrndaq_x_f16:
15111 Param0 = Intrinsic::arm_mve_vrinta_predicated;
15112 break;
15113 case ARM::BI__builtin_arm_mve_vrndmq_x_f16:
15114 Param0 = Intrinsic::arm_mve_vrintm_predicated;
15115 break;
15116 case ARM::BI__builtin_arm_mve_vrndnq_x_f16:
15117 Param0 = Intrinsic::arm_mve_vrintn_predicated;
15118 break;
15119 case ARM::BI__builtin_arm_mve_vrndpq_x_f16:
15120 Param0 = Intrinsic::arm_mve_vrintp_predicated;
15121 break;
15122 case ARM::BI__builtin_arm_mve_vrndq_x_f16:
15123 Param0 = Intrinsic::arm_mve_vrintz_predicated;
15124 break;
15125 case ARM::BI__builtin_arm_mve_vrndxq_x_f16:
15126 Param0 = Intrinsic::arm_mve_vrintx_predicated;
15127 break;
15128 }
15129 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15130 Value *Val1 = UndefValue::get(Val0);
15131 Value *Val2 = EmitScalarExpr(E->getArg(0));
15132 Value *Val3 = EmitScalarExpr(E->getArg(1));
15133 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
15134 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
15135 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val1});
15136}
15137case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f16: {
15138 Intrinsic::ID Param0;
15139 switch (BuiltinID) {
15140 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_f16:
15141 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
15142 break;
15143 }
15144 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15145 Value *Val1 = UndefValue::get(Val0);
15146 Value *Val2 = EmitScalarExpr(E->getArg(0));
15147 Value *Val3 = EmitScalarExpr(E->getArg(1));
15148 Value *Val4 = EmitScalarExpr(E->getArg(2));
15149 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15150 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15151 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val6});
15152}
15153case ARM::BI__builtin_arm_mve_vaddq_x_f16:
15154case ARM::BI__builtin_arm_mve_vmulq_x_f16:
15155case ARM::BI__builtin_arm_mve_vsubq_x_f16: {
15156 Intrinsic::ID Param0;
15157 switch (BuiltinID) {
15158 case ARM::BI__builtin_arm_mve_vaddq_x_f16:
15159 Param0 = Intrinsic::arm_mve_add_predicated;
15160 break;
15161 case ARM::BI__builtin_arm_mve_vmulq_x_f16:
15162 Param0 = Intrinsic::arm_mve_mul_predicated;
15163 break;
15164 case ARM::BI__builtin_arm_mve_vsubq_x_f16:
15165 Param0 = Intrinsic::arm_mve_sub_predicated;
15166 break;
15167 }
15168 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15169 Value *Val1 = UndefValue::get(Val0);
15170 Value *Val2 = EmitScalarExpr(E->getArg(0));
15171 Value *Val3 = EmitScalarExpr(E->getArg(1));
15172 Value *Val4 = EmitScalarExpr(E->getArg(2));
15173 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15174 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15175 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
15176}
15177case ARM::BI__builtin_arm_mve_vabdq_x_f16:
15178case ARM::BI__builtin_arm_mve_vmaxnmq_x_f16:
15179case ARM::BI__builtin_arm_mve_vminnmq_x_f16: {
15180 Intrinsic::ID Param0;
15181 switch (BuiltinID) {
15182 case ARM::BI__builtin_arm_mve_vabdq_x_f16:
15183 Param0 = Intrinsic::arm_mve_abd_predicated;
15184 break;
15185 case ARM::BI__builtin_arm_mve_vmaxnmq_x_f16:
15186 Param0 = Intrinsic::arm_mve_max_predicated;
15187 break;
15188 case ARM::BI__builtin_arm_mve_vminnmq_x_f16:
15189 Param0 = Intrinsic::arm_mve_min_predicated;
15190 break;
15191 }
15192 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15193 Value *Val1 = UndefValue::get(Val0);
15194 Value *Val2 = EmitScalarExpr(E->getArg(0));
15195 Value *Val3 = EmitScalarExpr(E->getArg(1));
15196 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
15197 Value *Val5 = EmitScalarExpr(E->getArg(2));
15198 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15199 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15200 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
15201}
15202case ARM::BI__builtin_arm_mve_vcvtq_x_f16_s16:
15203case ARM::BI__builtin_arm_mve_vcvtq_x_f16_u16: {
15204 uint32_t Param0;
15205 switch (BuiltinID) {
15206 case ARM::BI__builtin_arm_mve_vcvtq_x_f16_s16:
15207 Param0 = 0;
15208 break;
15209 case ARM::BI__builtin_arm_mve_vcvtq_x_f16_u16:
15210 Param0 = 1;
15211 break;
15212 }
15213 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15214 Value *Val1 = UndefValue::get(Val0);
15215 Value *Val2 = EmitScalarExpr(E->getArg(0));
15216 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15217 Value *Val4 = EmitScalarExpr(E->getArg(1));
15218 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15219 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15220 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
15221}
15222case ARM::BI__builtin_arm_mve_vrev32q_x_f16:
15223case ARM::BI__builtin_arm_mve_vrev64q_x_f16: {
15224 uint32_t Param0;
15225 switch (BuiltinID) {
15226 case ARM::BI__builtin_arm_mve_vrev32q_x_f16:
15227 Param0 = 32;
15228 break;
15229 case ARM::BI__builtin_arm_mve_vrev64q_x_f16:
15230 Param0 = 64;
15231 break;
15232 }
15233 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15234 Value *Val1 = UndefValue::get(Val0);
15235 Value *Val2 = EmitScalarExpr(E->getArg(0));
15236 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15237 Value *Val4 = EmitScalarExpr(E->getArg(1));
15238 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15239 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15240 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
15241}
15242case ARM::BI__builtin_arm_mve_vandq_x_f16:
15243case ARM::BI__builtin_arm_mve_vbicq_x_f16:
15244case ARM::BI__builtin_arm_mve_veorq_x_f16:
15245case ARM::BI__builtin_arm_mve_vornq_x_f16:
15246case ARM::BI__builtin_arm_mve_vorrq_x_f16: {
15247 Intrinsic::ID Param0;
15248 switch (BuiltinID) {
15249 case ARM::BI__builtin_arm_mve_vandq_x_f16:
15250 Param0 = Intrinsic::arm_mve_and_predicated;
15251 break;
15252 case ARM::BI__builtin_arm_mve_vbicq_x_f16:
15253 Param0 = Intrinsic::arm_mve_bic_predicated;
15254 break;
15255 case ARM::BI__builtin_arm_mve_veorq_x_f16:
15256 Param0 = Intrinsic::arm_mve_eor_predicated;
15257 break;
15258 case ARM::BI__builtin_arm_mve_vornq_x_f16:
15259 Param0 = Intrinsic::arm_mve_orn_predicated;
15260 break;
15261 case ARM::BI__builtin_arm_mve_vorrq_x_f16:
15262 Param0 = Intrinsic::arm_mve_orr_predicated;
15263 break;
15264 }
15265 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15266 Value *Val1 = UndefValue::get(Val0);
15267 Value *Val2 = EmitScalarExpr(E->getArg(0));
15268 llvm::Type *Val3 = llvm::FixedVectorType::get(Int16Ty, 8);
15269 Value *Val4 = Builder.CreateBitCast(Val2, Val3);
15270 Value *Val5 = EmitScalarExpr(E->getArg(1));
15271 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
15272 Value *Val7 = Builder.CreateBitCast(Val5, Val6);
15273 Value *Val8 = EmitScalarExpr(E->getArg(2));
15274 Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
15275 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val9});
15276 llvm::Type *Val11 = llvm::FixedVectorType::get(Int16Ty, 8);
15277 Value *Val12 = Builder.CreateBitCast(Val1, Val11);
15278 Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4, Val7, Val10, Val12});
15279 llvm::Type *Val14 = llvm::FixedVectorType::get(HalfTy, 8);
15280 return Builder.CreateBitCast(Val13, Val14);
15281}
15282case ARM::BI__builtin_arm_mve_vdupq_x_n_f16: {
15283 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15284 Value *Val1 = UndefValue::get(Val0);
15285 Value *Val2 = EmitScalarExpr(E->getArg(1));
15286 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
15287 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val3});
15288 Value *Val5 = EmitScalarExpr(E->getArg(0));
15289 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
15290 return Builder.CreateSelect(Val4, Val6, Val1);
15291}
15292case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f16:
15293case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f16: {
15294 uint32_t Param0;
15295 switch (BuiltinID) {
15296 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_f16:
15297 Param0 = 1;
15298 break;
15299 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_f16:
15300 Param0 = 0;
15301 break;
15302 }
15303 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15304 Value *Val1 = UndefValue::get(Val0);
15305 Value *Val2 = llvm::ConstantInt::get(Int32Ty, 1);
15306 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15307 Value *Val4 = EmitScalarExpr(E->getArg(0));
15308 Value *Val5 = EmitScalarExpr(E->getArg(1));
15309 Value *Val6 = EmitScalarExpr(E->getArg(2));
15310 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
15311 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
15312 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val1, Val4, Val5, Val8});
15313}
15314case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f16:
15315case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f16:
15316case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f16:
15317case ARM::BI__builtin_arm_mve_vcmulq_x_f16: {
15318 uint32_t Param0;
15319 switch (BuiltinID) {
15320 case ARM::BI__builtin_arm_mve_vcmulq_rot180_x_f16:
15321 Param0 = 2;
15322 break;
15323 case ARM::BI__builtin_arm_mve_vcmulq_rot270_x_f16:
15324 Param0 = 3;
15325 break;
15326 case ARM::BI__builtin_arm_mve_vcmulq_rot90_x_f16:
15327 Param0 = 1;
15328 break;
15329 case ARM::BI__builtin_arm_mve_vcmulq_x_f16:
15330 Param0 = 0;
15331 break;
15332 }
15333 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15334 Value *Val1 = UndefValue::get(Val0);
15335 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
15336 Value *Val3 = EmitScalarExpr(E->getArg(0));
15337 Value *Val4 = EmitScalarExpr(E->getArg(1));
15338 Value *Val5 = EmitScalarExpr(E->getArg(2));
15339 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15340 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15341 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcmulq_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val4, Val7});
15342}
15343case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_s16:
15344case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_u16: {
15345 uint32_t Param0;
15346 switch (BuiltinID) {
15347 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_s16:
15348 Param0 = 0;
15349 break;
15350 case ARM::BI__builtin_arm_mve_vcvtq_x_n_f16_u16:
15351 Param0 = 1;
15352 break;
15353 }
15354 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15355 Value *Val1 = UndefValue::get(Val0);
15356 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
15357 Value *Val3 = EmitScalarExpr(E->getArg(0));
15358 Value *Val4 = EmitScalarExpr(E->getArg(1));
15359 Value *Val5 = EmitScalarExpr(E->getArg(2));
15360 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15361 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15362 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val4, Val7});
15363}
15364case ARM::BI__builtin_arm_mve_vuninitializedq_f16:
15365case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_f16: {
15366 llvm::Type *Val0 = llvm::FixedVectorType::get(HalfTy, 8);
15367 return UndefValue::get(Val0);
15368}
15369case ARM::BI__builtin_arm_mve_vddupq_x_wb_u16:
15370case ARM::BI__builtin_arm_mve_vidupq_x_wb_u16: {
15371 Intrinsic::ID Param0;
15372 switch (BuiltinID) {
15373 case ARM::BI__builtin_arm_mve_vddupq_x_wb_u16:
15374 Param0 = Intrinsic::arm_mve_vddup_predicated;
15375 break;
15376 case ARM::BI__builtin_arm_mve_vidupq_x_wb_u16:
15377 Param0 = Intrinsic::arm_mve_vidup_predicated;
15378 break;
15379 }
15380 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15381 Value *Val1 = UndefValue::get(Val0);
15382 Address Val2 = EmitPointerWithAlignment(E->getArg(0));
15383 Value *Val3 = Builder.CreateLoad(Val2);
15384 Value *Val4 = EmitScalarExpr(E->getArg(1));
15385 Value *Val5 = EmitScalarExpr(E->getArg(2));
15386 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15387 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15388 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val3, Val4, Val7});
15389 Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
15390 Builder.CreateStore(Val9, Val2);
15391 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
15392}
15393case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u16:
15394case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u16: {
15395 Intrinsic::ID Param0;
15396 switch (BuiltinID) {
15397 case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u16:
15398 Param0 = Intrinsic::arm_mve_vdwdup_predicated;
15399 break;
15400 case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u16:
15401 Param0 = Intrinsic::arm_mve_viwdup_predicated;
15402 break;
15403 }
15404 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15405 Value *Val1 = UndefValue::get(Val0);
15406 Address Val2 = EmitPointerWithAlignment(E->getArg(0));
15407 Value *Val3 = Builder.CreateLoad(Val2);
15408 Value *Val4 = EmitScalarExpr(E->getArg(1));
15409 Value *Val5 = EmitScalarExpr(E->getArg(2));
15410 Value *Val6 = EmitScalarExpr(E->getArg(3));
15411 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
15412 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
15413 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val3, Val4, Val5, Val8});
15414 Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
15415 Builder.CreateStore(Val10, Val2);
15416 return Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
15417}
15418case ARM::BI__builtin_arm_mve_vaddq_x_n_s16:
15419case ARM::BI__builtin_arm_mve_vaddq_x_n_u16:
15420case ARM::BI__builtin_arm_mve_vmulq_x_n_s16:
15421case ARM::BI__builtin_arm_mve_vmulq_x_n_u16:
15422case ARM::BI__builtin_arm_mve_vsubq_x_n_s16:
15423case ARM::BI__builtin_arm_mve_vsubq_x_n_u16: {
15424 Intrinsic::ID Param0;
15425 switch (BuiltinID) {
15426 case ARM::BI__builtin_arm_mve_vaddq_x_n_s16:
15427 Param0 = Intrinsic::arm_mve_add_predicated;
15428 break;
15429 case ARM::BI__builtin_arm_mve_vaddq_x_n_u16:
15430 Param0 = Intrinsic::arm_mve_add_predicated;
15431 break;
15432 case ARM::BI__builtin_arm_mve_vmulq_x_n_s16:
15433 Param0 = Intrinsic::arm_mve_mul_predicated;
15434 break;
15435 case ARM::BI__builtin_arm_mve_vmulq_x_n_u16:
15436 Param0 = Intrinsic::arm_mve_mul_predicated;
15437 break;
15438 case ARM::BI__builtin_arm_mve_vsubq_x_n_s16:
15439 Param0 = Intrinsic::arm_mve_sub_predicated;
15440 break;
15441 case ARM::BI__builtin_arm_mve_vsubq_x_n_u16:
15442 Param0 = Intrinsic::arm_mve_sub_predicated;
15443 break;
15444 }
15445 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15446 Value *Val1 = UndefValue::get(Val0);
15447 Value *Val2 = EmitScalarExpr(E->getArg(0));
15448 Value *Val3 = EmitScalarExpr(E->getArg(1));
15449 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
15450 Value *Val5 = EmitScalarExpr(E->getArg(2));
15451 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15452 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15453 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val4, Val7, Val1});
15454}
15455case ARM::BI__builtin_arm_mve_vhaddq_x_n_s16:
15456case ARM::BI__builtin_arm_mve_vhaddq_x_n_u16:
15457case ARM::BI__builtin_arm_mve_vhsubq_x_n_s16:
15458case ARM::BI__builtin_arm_mve_vhsubq_x_n_u16: {
15459 uint32_t Param0;
15460 Intrinsic::ID Param1;
15461 switch (BuiltinID) {
15462 case ARM::BI__builtin_arm_mve_vhaddq_x_n_s16:
15463 Param0 = 0;
15464 Param1 = Intrinsic::arm_mve_hadd_predicated;
15465 break;
15466 case ARM::BI__builtin_arm_mve_vhaddq_x_n_u16:
15467 Param0 = 1;
15468 Param1 = Intrinsic::arm_mve_hadd_predicated;
15469 break;
15470 case ARM::BI__builtin_arm_mve_vhsubq_x_n_s16:
15471 Param0 = 0;
15472 Param1 = Intrinsic::arm_mve_hsub_predicated;
15473 break;
15474 case ARM::BI__builtin_arm_mve_vhsubq_x_n_u16:
15475 Param0 = 1;
15476 Param1 = Intrinsic::arm_mve_hsub_predicated;
15477 break;
15478 }
15479 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15480 Value *Val1 = UndefValue::get(Val0);
15481 Value *Val2 = EmitScalarExpr(E->getArg(0));
15482 Value *Val3 = EmitScalarExpr(E->getArg(1));
15483 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
15484 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
15485 Value *Val6 = EmitScalarExpr(E->getArg(2));
15486 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
15487 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
15488 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val4, Val5, Val8, Val1});
15489}
15490case ARM::BI__builtin_arm_mve_vabsq_x_s16:
15491case ARM::BI__builtin_arm_mve_vclsq_x_s16:
15492case ARM::BI__builtin_arm_mve_vclzq_x_s16:
15493case ARM::BI__builtin_arm_mve_vclzq_x_u16:
15494case ARM::BI__builtin_arm_mve_vmvnq_x_s16:
15495case ARM::BI__builtin_arm_mve_vmvnq_x_u16:
15496case ARM::BI__builtin_arm_mve_vnegq_x_s16: {
15497 Intrinsic::ID Param0;
15498 switch (BuiltinID) {
15499 case ARM::BI__builtin_arm_mve_vabsq_x_s16:
15500 Param0 = Intrinsic::arm_mve_abs_predicated;
15501 break;
15502 case ARM::BI__builtin_arm_mve_vclsq_x_s16:
15503 Param0 = Intrinsic::arm_mve_cls_predicated;
15504 break;
15505 case ARM::BI__builtin_arm_mve_vclzq_x_s16:
15506 Param0 = Intrinsic::arm_mve_clz_predicated;
15507 break;
15508 case ARM::BI__builtin_arm_mve_vclzq_x_u16:
15509 Param0 = Intrinsic::arm_mve_clz_predicated;
15510 break;
15511 case ARM::BI__builtin_arm_mve_vmvnq_x_s16:
15512 Param0 = Intrinsic::arm_mve_mvn_predicated;
15513 break;
15514 case ARM::BI__builtin_arm_mve_vmvnq_x_u16:
15515 Param0 = Intrinsic::arm_mve_mvn_predicated;
15516 break;
15517 case ARM::BI__builtin_arm_mve_vnegq_x_s16:
15518 Param0 = Intrinsic::arm_mve_neg_predicated;
15519 break;
15520 }
15521 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15522 Value *Val1 = UndefValue::get(Val0);
15523 Value *Val2 = EmitScalarExpr(E->getArg(0));
15524 Value *Val3 = EmitScalarExpr(E->getArg(1));
15525 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
15526 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4});
15527 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val5, Val1});
15528}
15529case ARM::BI__builtin_arm_mve_vddupq_x_n_u16:
15530case ARM::BI__builtin_arm_mve_vidupq_x_n_u16: {
15531 Intrinsic::ID Param0;
15532 switch (BuiltinID) {
15533 case ARM::BI__builtin_arm_mve_vddupq_x_n_u16:
15534 Param0 = Intrinsic::arm_mve_vddup_predicated;
15535 break;
15536 case ARM::BI__builtin_arm_mve_vidupq_x_n_u16:
15537 Param0 = Intrinsic::arm_mve_vidup_predicated;
15538 break;
15539 }
15540 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15541 Value *Val1 = UndefValue::get(Val0);
15542 Value *Val2 = EmitScalarExpr(E->getArg(0));
15543 Value *Val3 = EmitScalarExpr(E->getArg(1));
15544 Value *Val4 = EmitScalarExpr(E->getArg(2));
15545 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15546 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15547 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val6});
15548 return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
15549}
15550case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s16:
15551case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u16: {
15552 Intrinsic::ID Param0;
15553 switch (BuiltinID) {
15554 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s16:
15555 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
15556 break;
15557 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u16:
15558 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
15559 break;
15560 }
15561 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15562 Value *Val1 = UndefValue::get(Val0);
15563 Value *Val2 = EmitScalarExpr(E->getArg(0));
15564 Value *Val3 = EmitScalarExpr(E->getArg(1));
15565 Value *Val4 = EmitScalarExpr(E->getArg(2));
15566 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15567 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15568 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val6});
15569}
15570case ARM::BI__builtin_arm_mve_vaddq_x_s16:
15571case ARM::BI__builtin_arm_mve_vaddq_x_u16:
15572case ARM::BI__builtin_arm_mve_vmulq_x_s16:
15573case ARM::BI__builtin_arm_mve_vmulq_x_u16:
15574case ARM::BI__builtin_arm_mve_vshlq_x_n_s16:
15575case ARM::BI__builtin_arm_mve_vshlq_x_n_u16:
15576case ARM::BI__builtin_arm_mve_vsubq_x_s16:
15577case ARM::BI__builtin_arm_mve_vsubq_x_u16: {
15578 Intrinsic::ID Param0;
15579 switch (BuiltinID) {
15580 case ARM::BI__builtin_arm_mve_vaddq_x_s16:
15581 Param0 = Intrinsic::arm_mve_add_predicated;
15582 break;
15583 case ARM::BI__builtin_arm_mve_vaddq_x_u16:
15584 Param0 = Intrinsic::arm_mve_add_predicated;
15585 break;
15586 case ARM::BI__builtin_arm_mve_vmulq_x_s16:
15587 Param0 = Intrinsic::arm_mve_mul_predicated;
15588 break;
15589 case ARM::BI__builtin_arm_mve_vmulq_x_u16:
15590 Param0 = Intrinsic::arm_mve_mul_predicated;
15591 break;
15592 case ARM::BI__builtin_arm_mve_vshlq_x_n_s16:
15593 Param0 = Intrinsic::arm_mve_shl_imm_predicated;
15594 break;
15595 case ARM::BI__builtin_arm_mve_vshlq_x_n_u16:
15596 Param0 = Intrinsic::arm_mve_shl_imm_predicated;
15597 break;
15598 case ARM::BI__builtin_arm_mve_vsubq_x_s16:
15599 Param0 = Intrinsic::arm_mve_sub_predicated;
15600 break;
15601 case ARM::BI__builtin_arm_mve_vsubq_x_u16:
15602 Param0 = Intrinsic::arm_mve_sub_predicated;
15603 break;
15604 }
15605 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15606 Value *Val1 = UndefValue::get(Val0);
15607 Value *Val2 = EmitScalarExpr(E->getArg(0));
15608 Value *Val3 = EmitScalarExpr(E->getArg(1));
15609 Value *Val4 = EmitScalarExpr(E->getArg(2));
15610 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15611 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15612 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
15613}
15614case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u16:
15615case ARM::BI__builtin_arm_mve_viwdupq_x_n_u16: {
15616 Intrinsic::ID Param0;
15617 switch (BuiltinID) {
15618 case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u16:
15619 Param0 = Intrinsic::arm_mve_vdwdup_predicated;
15620 break;
15621 case ARM::BI__builtin_arm_mve_viwdupq_x_n_u16:
15622 Param0 = Intrinsic::arm_mve_viwdup_predicated;
15623 break;
15624 }
15625 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15626 Value *Val1 = UndefValue::get(Val0);
15627 Value *Val2 = EmitScalarExpr(E->getArg(0));
15628 Value *Val3 = EmitScalarExpr(E->getArg(1));
15629 Value *Val4 = EmitScalarExpr(E->getArg(2));
15630 Value *Val5 = EmitScalarExpr(E->getArg(3));
15631 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15632 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15633 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val1, Val2, Val3, Val4, Val7});
15634 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
15635}
15636case ARM::BI__builtin_arm_mve_vrshlq_x_s16:
15637case ARM::BI__builtin_arm_mve_vrshlq_x_u16:
15638case ARM::BI__builtin_arm_mve_vshlq_x_s16:
15639case ARM::BI__builtin_arm_mve_vshlq_x_u16: {
15640 uint32_t Param0;
15641 uint32_t Param1;
15642 switch (BuiltinID) {
15643 case ARM::BI__builtin_arm_mve_vrshlq_x_s16:
15644 Param0 = 1;
15645 Param1 = 0;
15646 break;
15647 case ARM::BI__builtin_arm_mve_vrshlq_x_u16:
15648 Param0 = 1;
15649 Param1 = 1;
15650 break;
15651 case ARM::BI__builtin_arm_mve_vshlq_x_s16:
15652 Param0 = 0;
15653 Param1 = 0;
15654 break;
15655 case ARM::BI__builtin_arm_mve_vshlq_x_u16:
15656 Param0 = 0;
15657 Param1 = 1;
15658 break;
15659 }
15660 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15661 Value *Val1 = UndefValue::get(Val0);
15662 Value *Val2 = EmitScalarExpr(E->getArg(0));
15663 Value *Val3 = EmitScalarExpr(E->getArg(1));
15664 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
15665 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
15666 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
15667 Value *Val7 = EmitScalarExpr(E->getArg(2));
15668 Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
15669 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val8});
15670 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
15671}
15672case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p8:
15673case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p8: {
15674 uint32_t Param0;
15675 switch (BuiltinID) {
15676 case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p8:
15677 Param0 = 0;
15678 break;
15679 case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p8:
15680 Param0 = 1;
15681 break;
15682 }
15683 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15684 Value *Val1 = UndefValue::get(Val0);
15685 Value *Val2 = EmitScalarExpr(E->getArg(0));
15686 Value *Val3 = EmitScalarExpr(E->getArg(1));
15687 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
15688 Value *Val5 = EmitScalarExpr(E->getArg(2));
15689 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15690 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15691 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_mull_poly_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
15692}
15693case ARM::BI__builtin_arm_mve_vabdq_x_s16:
15694case ARM::BI__builtin_arm_mve_vabdq_x_u16:
15695case ARM::BI__builtin_arm_mve_vhaddq_x_s16:
15696case ARM::BI__builtin_arm_mve_vhaddq_x_u16:
15697case ARM::BI__builtin_arm_mve_vhsubq_x_s16:
15698case ARM::BI__builtin_arm_mve_vhsubq_x_u16:
15699case ARM::BI__builtin_arm_mve_vmaxq_x_s16:
15700case ARM::BI__builtin_arm_mve_vmaxq_x_u16:
15701case ARM::BI__builtin_arm_mve_vminq_x_s16:
15702case ARM::BI__builtin_arm_mve_vminq_x_u16:
15703case ARM::BI__builtin_arm_mve_vmulhq_x_s16:
15704case ARM::BI__builtin_arm_mve_vmulhq_x_u16:
15705case ARM::BI__builtin_arm_mve_vrhaddq_x_s16:
15706case ARM::BI__builtin_arm_mve_vrhaddq_x_u16:
15707case ARM::BI__builtin_arm_mve_vrmulhq_x_s16:
15708case ARM::BI__builtin_arm_mve_vrmulhq_x_u16:
15709case ARM::BI__builtin_arm_mve_vrshrq_x_n_s16:
15710case ARM::BI__builtin_arm_mve_vrshrq_x_n_u16:
15711case ARM::BI__builtin_arm_mve_vshrq_x_n_s16:
15712case ARM::BI__builtin_arm_mve_vshrq_x_n_u16: {
15713 uint32_t Param0;
15714 Intrinsic::ID Param1;
15715 switch (BuiltinID) {
15716 case ARM::BI__builtin_arm_mve_vabdq_x_s16:
15717 Param0 = 0;
15718 Param1 = Intrinsic::arm_mve_abd_predicated;
15719 break;
15720 case ARM::BI__builtin_arm_mve_vabdq_x_u16:
15721 Param0 = 1;
15722 Param1 = Intrinsic::arm_mve_abd_predicated;
15723 break;
15724 case ARM::BI__builtin_arm_mve_vhaddq_x_s16:
15725 Param0 = 0;
15726 Param1 = Intrinsic::arm_mve_hadd_predicated;
15727 break;
15728 case ARM::BI__builtin_arm_mve_vhaddq_x_u16:
15729 Param0 = 1;
15730 Param1 = Intrinsic::arm_mve_hadd_predicated;
15731 break;
15732 case ARM::BI__builtin_arm_mve_vhsubq_x_s16:
15733 Param0 = 0;
15734 Param1 = Intrinsic::arm_mve_hsub_predicated;
15735 break;
15736 case ARM::BI__builtin_arm_mve_vhsubq_x_u16:
15737 Param0 = 1;
15738 Param1 = Intrinsic::arm_mve_hsub_predicated;
15739 break;
15740 case ARM::BI__builtin_arm_mve_vmaxq_x_s16:
15741 Param0 = 0;
15742 Param1 = Intrinsic::arm_mve_max_predicated;
15743 break;
15744 case ARM::BI__builtin_arm_mve_vmaxq_x_u16:
15745 Param0 = 1;
15746 Param1 = Intrinsic::arm_mve_max_predicated;
15747 break;
15748 case ARM::BI__builtin_arm_mve_vminq_x_s16:
15749 Param0 = 0;
15750 Param1 = Intrinsic::arm_mve_min_predicated;
15751 break;
15752 case ARM::BI__builtin_arm_mve_vminq_x_u16:
15753 Param0 = 1;
15754 Param1 = Intrinsic::arm_mve_min_predicated;
15755 break;
15756 case ARM::BI__builtin_arm_mve_vmulhq_x_s16:
15757 Param0 = 0;
15758 Param1 = Intrinsic::arm_mve_mulh_predicated;
15759 break;
15760 case ARM::BI__builtin_arm_mve_vmulhq_x_u16:
15761 Param0 = 1;
15762 Param1 = Intrinsic::arm_mve_mulh_predicated;
15763 break;
15764 case ARM::BI__builtin_arm_mve_vrhaddq_x_s16:
15765 Param0 = 0;
15766 Param1 = Intrinsic::arm_mve_rhadd_predicated;
15767 break;
15768 case ARM::BI__builtin_arm_mve_vrhaddq_x_u16:
15769 Param0 = 1;
15770 Param1 = Intrinsic::arm_mve_rhadd_predicated;
15771 break;
15772 case ARM::BI__builtin_arm_mve_vrmulhq_x_s16:
15773 Param0 = 0;
15774 Param1 = Intrinsic::arm_mve_rmulh_predicated;
15775 break;
15776 case ARM::BI__builtin_arm_mve_vrmulhq_x_u16:
15777 Param0 = 1;
15778 Param1 = Intrinsic::arm_mve_rmulh_predicated;
15779 break;
15780 case ARM::BI__builtin_arm_mve_vrshrq_x_n_s16:
15781 Param0 = 0;
15782 Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
15783 break;
15784 case ARM::BI__builtin_arm_mve_vrshrq_x_n_u16:
15785 Param0 = 1;
15786 Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
15787 break;
15788 case ARM::BI__builtin_arm_mve_vshrq_x_n_s16:
15789 Param0 = 0;
15790 Param1 = Intrinsic::arm_mve_shr_imm_predicated;
15791 break;
15792 case ARM::BI__builtin_arm_mve_vshrq_x_n_u16:
15793 Param0 = 1;
15794 Param1 = Intrinsic::arm_mve_shr_imm_predicated;
15795 break;
15796 }
15797 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15798 Value *Val1 = UndefValue::get(Val0);
15799 Value *Val2 = EmitScalarExpr(E->getArg(0));
15800 Value *Val3 = EmitScalarExpr(E->getArg(1));
15801 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
15802 Value *Val5 = EmitScalarExpr(E->getArg(2));
15803 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15804 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15805 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
15806}
15807case ARM::BI__builtin_arm_mve_vmullbq_int_x_s8:
15808case ARM::BI__builtin_arm_mve_vmullbq_int_x_u8:
15809case ARM::BI__builtin_arm_mve_vmulltq_int_x_s8:
15810case ARM::BI__builtin_arm_mve_vmulltq_int_x_u8:
15811case ARM::BI__builtin_arm_mve_vshllbq_x_n_s8:
15812case ARM::BI__builtin_arm_mve_vshllbq_x_n_u8:
15813case ARM::BI__builtin_arm_mve_vshlltq_x_n_s8:
15814case ARM::BI__builtin_arm_mve_vshlltq_x_n_u8: {
15815 uint32_t Param0;
15816 uint32_t Param1;
15817 Intrinsic::ID Param2;
15818 switch (BuiltinID) {
15819 case ARM::BI__builtin_arm_mve_vmullbq_int_x_s8:
15820 Param0 = 0;
15821 Param1 = 0;
15822 Param2 = Intrinsic::arm_mve_mull_int_predicated;
15823 break;
15824 case ARM::BI__builtin_arm_mve_vmullbq_int_x_u8:
15825 Param0 = 1;
15826 Param1 = 0;
15827 Param2 = Intrinsic::arm_mve_mull_int_predicated;
15828 break;
15829 case ARM::BI__builtin_arm_mve_vmulltq_int_x_s8:
15830 Param0 = 0;
15831 Param1 = 1;
15832 Param2 = Intrinsic::arm_mve_mull_int_predicated;
15833 break;
15834 case ARM::BI__builtin_arm_mve_vmulltq_int_x_u8:
15835 Param0 = 1;
15836 Param1 = 1;
15837 Param2 = Intrinsic::arm_mve_mull_int_predicated;
15838 break;
15839 case ARM::BI__builtin_arm_mve_vshllbq_x_n_s8:
15840 Param0 = 0;
15841 Param1 = 0;
15842 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
15843 break;
15844 case ARM::BI__builtin_arm_mve_vshllbq_x_n_u8:
15845 Param0 = 1;
15846 Param1 = 0;
15847 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
15848 break;
15849 case ARM::BI__builtin_arm_mve_vshlltq_x_n_s8:
15850 Param0 = 0;
15851 Param1 = 1;
15852 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
15853 break;
15854 case ARM::BI__builtin_arm_mve_vshlltq_x_n_u8:
15855 Param0 = 1;
15856 Param1 = 1;
15857 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
15858 break;
15859 }
15860 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15861 Value *Val1 = UndefValue::get(Val0);
15862 Value *Val2 = EmitScalarExpr(E->getArg(0));
15863 Value *Val3 = EmitScalarExpr(E->getArg(1));
15864 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
15865 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
15866 Value *Val6 = EmitScalarExpr(E->getArg(2));
15867 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
15868 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
15869 return Builder.CreateCall(CGM.getIntrinsic(Param2, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val5, Val8, Val1});
15870}
15871case ARM::BI__builtin_arm_mve_vcvtq_x_s16_f16:
15872case ARM::BI__builtin_arm_mve_vcvtq_x_u16_f16: {
15873 uint32_t Param0;
15874 switch (BuiltinID) {
15875 case ARM::BI__builtin_arm_mve_vcvtq_x_s16_f16:
15876 Param0 = 0;
15877 break;
15878 case ARM::BI__builtin_arm_mve_vcvtq_x_u16_f16:
15879 Param0 = 1;
15880 break;
15881 }
15882 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15883 Value *Val1 = UndefValue::get(Val0);
15884 Value *Val2 = EmitScalarExpr(E->getArg(0));
15885 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15886 Value *Val4 = EmitScalarExpr(E->getArg(1));
15887 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15888 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15889 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
15890}
15891case ARM::BI__builtin_arm_mve_vrev32q_x_s16:
15892case ARM::BI__builtin_arm_mve_vrev32q_x_u16:
15893case ARM::BI__builtin_arm_mve_vrev64q_x_s16:
15894case ARM::BI__builtin_arm_mve_vrev64q_x_u16: {
15895 uint32_t Param0;
15896 switch (BuiltinID) {
15897 case ARM::BI__builtin_arm_mve_vrev32q_x_s16:
15898 Param0 = 32;
15899 break;
15900 case ARM::BI__builtin_arm_mve_vrev32q_x_u16:
15901 Param0 = 32;
15902 break;
15903 case ARM::BI__builtin_arm_mve_vrev64q_x_s16:
15904 Param0 = 64;
15905 break;
15906 case ARM::BI__builtin_arm_mve_vrev64q_x_u16:
15907 Param0 = 64;
15908 break;
15909 }
15910 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15911 Value *Val1 = UndefValue::get(Val0);
15912 Value *Val2 = EmitScalarExpr(E->getArg(0));
15913 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15914 Value *Val4 = EmitScalarExpr(E->getArg(1));
15915 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
15916 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
15917 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val6, Val1});
15918}
15919case ARM::BI__builtin_arm_mve_vmovlbq_x_s8:
15920case ARM::BI__builtin_arm_mve_vmovlbq_x_u8:
15921case ARM::BI__builtin_arm_mve_vmovltq_x_s8:
15922case ARM::BI__builtin_arm_mve_vmovltq_x_u8: {
15923 uint32_t Param0;
15924 uint32_t Param1;
15925 switch (BuiltinID) {
15926 case ARM::BI__builtin_arm_mve_vmovlbq_x_s8:
15927 Param0 = 0;
15928 Param1 = 0;
15929 break;
15930 case ARM::BI__builtin_arm_mve_vmovlbq_x_u8:
15931 Param0 = 1;
15932 Param1 = 0;
15933 break;
15934 case ARM::BI__builtin_arm_mve_vmovltq_x_s8:
15935 Param0 = 0;
15936 Param1 = 1;
15937 break;
15938 case ARM::BI__builtin_arm_mve_vmovltq_x_u8:
15939 Param0 = 1;
15940 Param1 = 1;
15941 break;
15942 }
15943 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15944 Value *Val1 = UndefValue::get(Val0);
15945 Value *Val2 = EmitScalarExpr(E->getArg(0));
15946 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
15947 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
15948 Value *Val5 = EmitScalarExpr(E->getArg(1));
15949 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
15950 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
15951 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovl_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val4, Val7, Val1});
15952}
15953case ARM::BI__builtin_arm_mve_vandq_x_s16:
15954case ARM::BI__builtin_arm_mve_vandq_x_u16:
15955case ARM::BI__builtin_arm_mve_vbicq_x_s16:
15956case ARM::BI__builtin_arm_mve_vbicq_x_u16:
15957case ARM::BI__builtin_arm_mve_veorq_x_s16:
15958case ARM::BI__builtin_arm_mve_veorq_x_u16:
15959case ARM::BI__builtin_arm_mve_vornq_x_s16:
15960case ARM::BI__builtin_arm_mve_vornq_x_u16:
15961case ARM::BI__builtin_arm_mve_vorrq_x_s16:
15962case ARM::BI__builtin_arm_mve_vorrq_x_u16: {
15963 Intrinsic::ID Param0;
15964 switch (BuiltinID) {
15965 case ARM::BI__builtin_arm_mve_vandq_x_s16:
15966 Param0 = Intrinsic::arm_mve_and_predicated;
15967 break;
15968 case ARM::BI__builtin_arm_mve_vandq_x_u16:
15969 Param0 = Intrinsic::arm_mve_and_predicated;
15970 break;
15971 case ARM::BI__builtin_arm_mve_vbicq_x_s16:
15972 Param0 = Intrinsic::arm_mve_bic_predicated;
15973 break;
15974 case ARM::BI__builtin_arm_mve_vbicq_x_u16:
15975 Param0 = Intrinsic::arm_mve_bic_predicated;
15976 break;
15977 case ARM::BI__builtin_arm_mve_veorq_x_s16:
15978 Param0 = Intrinsic::arm_mve_eor_predicated;
15979 break;
15980 case ARM::BI__builtin_arm_mve_veorq_x_u16:
15981 Param0 = Intrinsic::arm_mve_eor_predicated;
15982 break;
15983 case ARM::BI__builtin_arm_mve_vornq_x_s16:
15984 Param0 = Intrinsic::arm_mve_orn_predicated;
15985 break;
15986 case ARM::BI__builtin_arm_mve_vornq_x_u16:
15987 Param0 = Intrinsic::arm_mve_orn_predicated;
15988 break;
15989 case ARM::BI__builtin_arm_mve_vorrq_x_s16:
15990 Param0 = Intrinsic::arm_mve_orr_predicated;
15991 break;
15992 case ARM::BI__builtin_arm_mve_vorrq_x_u16:
15993 Param0 = Intrinsic::arm_mve_orr_predicated;
15994 break;
15995 }
15996 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
15997 Value *Val1 = UndefValue::get(Val0);
15998 Value *Val2 = EmitScalarExpr(E->getArg(0));
15999 llvm::Type *Val3 = llvm::FixedVectorType::get(Int16Ty, 8);
16000 Value *Val4 = Builder.CreateBitCast(Val2, Val3);
16001 Value *Val5 = EmitScalarExpr(E->getArg(1));
16002 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
16003 Value *Val7 = Builder.CreateBitCast(Val5, Val6);
16004 Value *Val8 = EmitScalarExpr(E->getArg(2));
16005 Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
16006 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val9});
16007 llvm::Type *Val11 = llvm::FixedVectorType::get(Int16Ty, 8);
16008 Value *Val12 = Builder.CreateBitCast(Val1, Val11);
16009 Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val4, Val7, Val10, Val12});
16010 llvm::Type *Val14 = llvm::FixedVectorType::get(Int16Ty, 8);
16011 return Builder.CreateBitCast(Val13, Val14);
16012}
16013case ARM::BI__builtin_arm_mve_vdupq_x_n_s16:
16014case ARM::BI__builtin_arm_mve_vdupq_x_n_u16: {
16015 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16016 Value *Val1 = UndefValue::get(Val0);
16017 Value *Val2 = EmitScalarExpr(E->getArg(1));
16018 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
16019 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val3});
16020 Value *Val5 = EmitScalarExpr(E->getArg(0));
16021 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
16022 return Builder.CreateSelect(Val4, Val6, Val1);
16023}
16024case ARM::BI__builtin_arm_mve_vmvnq_x_n_s16:
16025case ARM::BI__builtin_arm_mve_vmvnq_x_n_u16: {
16026 bool Param0;
16027 switch (BuiltinID) {
16028 case ARM::BI__builtin_arm_mve_vmvnq_x_n_s16:
16029 Param0 = true;
16030 break;
16031 case ARM::BI__builtin_arm_mve_vmvnq_x_n_u16:
16032 Param0 = false;
16033 break;
16034 }
16035 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16036 Value *Val1 = UndefValue::get(Val0);
16037 Value *Val2 = EmitScalarExpr(E->getArg(1));
16038 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
16039 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val3});
16040 Value *Val5 = EmitScalarExpr(E->getArg(0));
16041 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16042 Value *Val7 = Builder.CreateIntCast(Val6, Int16Ty, Param0);
16043 Value *Val8 = ARMMVEVectorSplat(Builder, Val7);
16044 Value *Val9 = Builder.CreateNot(Val8);
16045 return Builder.CreateSelect(Val4, Val9, Val1);
16046}
16047case ARM::BI__builtin_arm_mve_vcvtaq_x_s16_f16:
16048case ARM::BI__builtin_arm_mve_vcvtaq_x_u16_f16:
16049case ARM::BI__builtin_arm_mve_vcvtmq_x_s16_f16:
16050case ARM::BI__builtin_arm_mve_vcvtmq_x_u16_f16:
16051case ARM::BI__builtin_arm_mve_vcvtnq_x_s16_f16:
16052case ARM::BI__builtin_arm_mve_vcvtnq_x_u16_f16:
16053case ARM::BI__builtin_arm_mve_vcvtpq_x_s16_f16:
16054case ARM::BI__builtin_arm_mve_vcvtpq_x_u16_f16: {
16055 uint32_t Param0;
16056 Intrinsic::ID Param1;
16057 switch (BuiltinID) {
16058 case ARM::BI__builtin_arm_mve_vcvtaq_x_s16_f16:
16059 Param0 = 0;
16060 Param1 = Intrinsic::arm_mve_vcvta_predicated;
16061 break;
16062 case ARM::BI__builtin_arm_mve_vcvtaq_x_u16_f16:
16063 Param0 = 1;
16064 Param1 = Intrinsic::arm_mve_vcvta_predicated;
16065 break;
16066 case ARM::BI__builtin_arm_mve_vcvtmq_x_s16_f16:
16067 Param0 = 0;
16068 Param1 = Intrinsic::arm_mve_vcvtm_predicated;
16069 break;
16070 case ARM::BI__builtin_arm_mve_vcvtmq_x_u16_f16:
16071 Param0 = 1;
16072 Param1 = Intrinsic::arm_mve_vcvtm_predicated;
16073 break;
16074 case ARM::BI__builtin_arm_mve_vcvtnq_x_s16_f16:
16075 Param0 = 0;
16076 Param1 = Intrinsic::arm_mve_vcvtn_predicated;
16077 break;
16078 case ARM::BI__builtin_arm_mve_vcvtnq_x_u16_f16:
16079 Param0 = 1;
16080 Param1 = Intrinsic::arm_mve_vcvtn_predicated;
16081 break;
16082 case ARM::BI__builtin_arm_mve_vcvtpq_x_s16_f16:
16083 Param0 = 0;
16084 Param1 = Intrinsic::arm_mve_vcvtp_predicated;
16085 break;
16086 case ARM::BI__builtin_arm_mve_vcvtpq_x_u16_f16:
16087 Param0 = 1;
16088 Param1 = Intrinsic::arm_mve_vcvtp_predicated;
16089 break;
16090 }
16091 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16092 Value *Val1 = UndefValue::get(Val0);
16093 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
16094 Value *Val3 = EmitScalarExpr(E->getArg(0));
16095 Value *Val4 = EmitScalarExpr(E->getArg(1));
16096 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16097 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val5});
16098 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val6});
16099}
16100case ARM::BI__builtin_arm_mve_vcvtq_x_n_s16_f16:
16101case ARM::BI__builtin_arm_mve_vcvtq_x_n_u16_f16: {
16102 uint32_t Param0;
16103 switch (BuiltinID) {
16104 case ARM::BI__builtin_arm_mve_vcvtq_x_n_s16_f16:
16105 Param0 = 0;
16106 break;
16107 case ARM::BI__builtin_arm_mve_vcvtq_x_n_u16_f16:
16108 Param0 = 1;
16109 break;
16110 }
16111 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16112 Value *Val1 = UndefValue::get(Val0);
16113 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
16114 Value *Val3 = EmitScalarExpr(E->getArg(0));
16115 Value *Val4 = EmitScalarExpr(E->getArg(1));
16116 Value *Val5 = EmitScalarExpr(E->getArg(2));
16117 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16118 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val6});
16119 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(HalfTy, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val1, Val3, Val4, Val7});
16120}
16121case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s16:
16122case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u16:
16123case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s16:
16124case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u16:
16125case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s16:
16126case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s16: {
16127 uint32_t Param0;
16128 uint32_t Param1;
16129 switch (BuiltinID) {
16130 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s16:
16131 Param0 = 1;
16132 Param1 = 1;
16133 break;
16134 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u16:
16135 Param0 = 1;
16136 Param1 = 1;
16137 break;
16138 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s16:
16139 Param0 = 1;
16140 Param1 = 0;
16141 break;
16142 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u16:
16143 Param0 = 1;
16144 Param1 = 0;
16145 break;
16146 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s16:
16147 Param0 = 0;
16148 Param1 = 1;
16149 break;
16150 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s16:
16151 Param0 = 0;
16152 Param1 = 0;
16153 break;
16154 }
16155 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16156 Value *Val1 = UndefValue::get(Val0);
16157 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
16158 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
16159 Value *Val4 = EmitScalarExpr(E->getArg(0));
16160 Value *Val5 = EmitScalarExpr(E->getArg(1));
16161 Value *Val6 = EmitScalarExpr(E->getArg(2));
16162 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
16163 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val7});
16164 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 8)}), {Val2, Val3, Val1, Val4, Val5, Val8});
16165}
16166case ARM::BI__builtin_arm_mve_vnegq_s16: {
16167 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16168 Value *Val1 = llvm::Constant::getNullValue(Val0);
16169 Value *Val2 = EmitScalarExpr(E->getArg(0));
16170 return Builder.CreateSub(Val1, Val2);
16171}
16172case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s16:
16173case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u16:
16174case ARM::BI__builtin_arm_mve_vuninitializedq_s16:
16175case ARM::BI__builtin_arm_mve_vuninitializedq_u16: {
16176 llvm::Type *Val0 = llvm::FixedVectorType::get(Int16Ty, 8);
16177 return UndefValue::get(Val0);
16178}
16179case ARM::BI__builtin_arm_mve_vddupq_x_wb_u32:
16180case ARM::BI__builtin_arm_mve_vidupq_x_wb_u32: {
16181 Intrinsic::ID Param0;
16182 switch (BuiltinID) {
16183 case ARM::BI__builtin_arm_mve_vddupq_x_wb_u32:
16184 Param0 = Intrinsic::arm_mve_vddup_predicated;
16185 break;
16186 case ARM::BI__builtin_arm_mve_vidupq_x_wb_u32:
16187 Param0 = Intrinsic::arm_mve_vidup_predicated;
16188 break;
16189 }
16190 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16191 Value *Val1 = UndefValue::get(Val0);
16192 Address Val2 = EmitPointerWithAlignment(E->getArg(0));
16193 Value *Val3 = Builder.CreateLoad(Val2);
16194 Value *Val4 = EmitScalarExpr(E->getArg(1));
16195 Value *Val5 = EmitScalarExpr(E->getArg(2));
16196 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16197 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16198 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val3, Val4, Val7});
16199 Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
16200 Builder.CreateStore(Val9, Val2);
16201 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
16202}
16203case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u32:
16204case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u32: {
16205 Intrinsic::ID Param0;
16206 switch (BuiltinID) {
16207 case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u32:
16208 Param0 = Intrinsic::arm_mve_vdwdup_predicated;
16209 break;
16210 case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u32:
16211 Param0 = Intrinsic::arm_mve_viwdup_predicated;
16212 break;
16213 }
16214 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16215 Value *Val1 = UndefValue::get(Val0);
16216 Address Val2 = EmitPointerWithAlignment(E->getArg(0));
16217 Value *Val3 = Builder.CreateLoad(Val2);
16218 Value *Val4 = EmitScalarExpr(E->getArg(1));
16219 Value *Val5 = EmitScalarExpr(E->getArg(2));
16220 Value *Val6 = EmitScalarExpr(E->getArg(3));
16221 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
16222 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
16223 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val3, Val4, Val5, Val8});
16224 Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
16225 Builder.CreateStore(Val10, Val2);
16226 return Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
16227}
16228case ARM::BI__builtin_arm_mve_vaddq_x_n_s32:
16229case ARM::BI__builtin_arm_mve_vaddq_x_n_u32:
16230case ARM::BI__builtin_arm_mve_vmulq_x_n_s32:
16231case ARM::BI__builtin_arm_mve_vmulq_x_n_u32:
16232case ARM::BI__builtin_arm_mve_vsubq_x_n_s32:
16233case ARM::BI__builtin_arm_mve_vsubq_x_n_u32: {
16234 Intrinsic::ID Param0;
16235 switch (BuiltinID) {
16236 case ARM::BI__builtin_arm_mve_vaddq_x_n_s32:
16237 Param0 = Intrinsic::arm_mve_add_predicated;
16238 break;
16239 case ARM::BI__builtin_arm_mve_vaddq_x_n_u32:
16240 Param0 = Intrinsic::arm_mve_add_predicated;
16241 break;
16242 case ARM::BI__builtin_arm_mve_vmulq_x_n_s32:
16243 Param0 = Intrinsic::arm_mve_mul_predicated;
16244 break;
16245 case ARM::BI__builtin_arm_mve_vmulq_x_n_u32:
16246 Param0 = Intrinsic::arm_mve_mul_predicated;
16247 break;
16248 case ARM::BI__builtin_arm_mve_vsubq_x_n_s32:
16249 Param0 = Intrinsic::arm_mve_sub_predicated;
16250 break;
16251 case ARM::BI__builtin_arm_mve_vsubq_x_n_u32:
16252 Param0 = Intrinsic::arm_mve_sub_predicated;
16253 break;
16254 }
16255 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16256 Value *Val1 = UndefValue::get(Val0);
16257 Value *Val2 = EmitScalarExpr(E->getArg(0));
16258 Value *Val3 = EmitScalarExpr(E->getArg(1));
16259 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
16260 Value *Val5 = EmitScalarExpr(E->getArg(2));
16261 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16262 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16263 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val4, Val7, Val1});
16264}
16265case ARM::BI__builtin_arm_mve_vhaddq_x_n_s32:
16266case ARM::BI__builtin_arm_mve_vhaddq_x_n_u32:
16267case ARM::BI__builtin_arm_mve_vhsubq_x_n_s32:
16268case ARM::BI__builtin_arm_mve_vhsubq_x_n_u32: {
16269 uint32_t Param0;
16270 Intrinsic::ID Param1;
16271 switch (BuiltinID) {
16272 case ARM::BI__builtin_arm_mve_vhaddq_x_n_s32:
16273 Param0 = 0;
16274 Param1 = Intrinsic::arm_mve_hadd_predicated;
16275 break;
16276 case ARM::BI__builtin_arm_mve_vhaddq_x_n_u32:
16277 Param0 = 1;
16278 Param1 = Intrinsic::arm_mve_hadd_predicated;
16279 break;
16280 case ARM::BI__builtin_arm_mve_vhsubq_x_n_s32:
16281 Param0 = 0;
16282 Param1 = Intrinsic::arm_mve_hsub_predicated;
16283 break;
16284 case ARM::BI__builtin_arm_mve_vhsubq_x_n_u32:
16285 Param0 = 1;
16286 Param1 = Intrinsic::arm_mve_hsub_predicated;
16287 break;
16288 }
16289 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16290 Value *Val1 = UndefValue::get(Val0);
16291 Value *Val2 = EmitScalarExpr(E->getArg(0));
16292 Value *Val3 = EmitScalarExpr(E->getArg(1));
16293 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
16294 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
16295 Value *Val6 = EmitScalarExpr(E->getArg(2));
16296 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
16297 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
16298 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val4, Val5, Val8, Val1});
16299}
16300case ARM::BI__builtin_arm_mve_vabsq_x_s32:
16301case ARM::BI__builtin_arm_mve_vclsq_x_s32:
16302case ARM::BI__builtin_arm_mve_vclzq_x_s32:
16303case ARM::BI__builtin_arm_mve_vclzq_x_u32:
16304case ARM::BI__builtin_arm_mve_vmvnq_x_s32:
16305case ARM::BI__builtin_arm_mve_vmvnq_x_u32:
16306case ARM::BI__builtin_arm_mve_vnegq_x_s32: {
16307 Intrinsic::ID Param0;
16308 switch (BuiltinID) {
16309 case ARM::BI__builtin_arm_mve_vabsq_x_s32:
16310 Param0 = Intrinsic::arm_mve_abs_predicated;
16311 break;
16312 case ARM::BI__builtin_arm_mve_vclsq_x_s32:
16313 Param0 = Intrinsic::arm_mve_cls_predicated;
16314 break;
16315 case ARM::BI__builtin_arm_mve_vclzq_x_s32:
16316 Param0 = Intrinsic::arm_mve_clz_predicated;
16317 break;
16318 case ARM::BI__builtin_arm_mve_vclzq_x_u32:
16319 Param0 = Intrinsic::arm_mve_clz_predicated;
16320 break;
16321 case ARM::BI__builtin_arm_mve_vmvnq_x_s32:
16322 Param0 = Intrinsic::arm_mve_mvn_predicated;
16323 break;
16324 case ARM::BI__builtin_arm_mve_vmvnq_x_u32:
16325 Param0 = Intrinsic::arm_mve_mvn_predicated;
16326 break;
16327 case ARM::BI__builtin_arm_mve_vnegq_x_s32:
16328 Param0 = Intrinsic::arm_mve_neg_predicated;
16329 break;
16330 }
16331 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16332 Value *Val1 = UndefValue::get(Val0);
16333 Value *Val2 = EmitScalarExpr(E->getArg(0));
16334 Value *Val3 = EmitScalarExpr(E->getArg(1));
16335 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
16336 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4});
16337 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val5, Val1});
16338}
16339case ARM::BI__builtin_arm_mve_vddupq_x_n_u32:
16340case ARM::BI__builtin_arm_mve_vidupq_x_n_u32: {
16341 Intrinsic::ID Param0;
16342 switch (BuiltinID) {
16343 case ARM::BI__builtin_arm_mve_vddupq_x_n_u32:
16344 Param0 = Intrinsic::arm_mve_vddup_predicated;
16345 break;
16346 case ARM::BI__builtin_arm_mve_vidupq_x_n_u32:
16347 Param0 = Intrinsic::arm_mve_vidup_predicated;
16348 break;
16349 }
16350 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16351 Value *Val1 = UndefValue::get(Val0);
16352 Value *Val2 = EmitScalarExpr(E->getArg(0));
16353 Value *Val3 = EmitScalarExpr(E->getArg(1));
16354 Value *Val4 = EmitScalarExpr(E->getArg(2));
16355 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16356 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
16357 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
16358 return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
16359}
16360case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s32:
16361case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u32: {
16362 Intrinsic::ID Param0;
16363 switch (BuiltinID) {
16364 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s32:
16365 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
16366 break;
16367 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u32:
16368 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
16369 break;
16370 }
16371 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16372 Value *Val1 = UndefValue::get(Val0);
16373 Value *Val2 = EmitScalarExpr(E->getArg(0));
16374 Value *Val3 = EmitScalarExpr(E->getArg(1));
16375 Value *Val4 = EmitScalarExpr(E->getArg(2));
16376 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16377 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
16378 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val6});
16379}
16380case ARM::BI__builtin_arm_mve_vaddq_x_s32:
16381case ARM::BI__builtin_arm_mve_vaddq_x_u32:
16382case ARM::BI__builtin_arm_mve_vmulq_x_s32:
16383case ARM::BI__builtin_arm_mve_vmulq_x_u32:
16384case ARM::BI__builtin_arm_mve_vshlq_x_n_s32:
16385case ARM::BI__builtin_arm_mve_vshlq_x_n_u32:
16386case ARM::BI__builtin_arm_mve_vsubq_x_s32:
16387case ARM::BI__builtin_arm_mve_vsubq_x_u32: {
16388 Intrinsic::ID Param0;
16389 switch (BuiltinID) {
16390 case ARM::BI__builtin_arm_mve_vaddq_x_s32:
16391 Param0 = Intrinsic::arm_mve_add_predicated;
16392 break;
16393 case ARM::BI__builtin_arm_mve_vaddq_x_u32:
16394 Param0 = Intrinsic::arm_mve_add_predicated;
16395 break;
16396 case ARM::BI__builtin_arm_mve_vmulq_x_s32:
16397 Param0 = Intrinsic::arm_mve_mul_predicated;
16398 break;
16399 case ARM::BI__builtin_arm_mve_vmulq_x_u32:
16400 Param0 = Intrinsic::arm_mve_mul_predicated;
16401 break;
16402 case ARM::BI__builtin_arm_mve_vshlq_x_n_s32:
16403 Param0 = Intrinsic::arm_mve_shl_imm_predicated;
16404 break;
16405 case ARM::BI__builtin_arm_mve_vshlq_x_n_u32:
16406 Param0 = Intrinsic::arm_mve_shl_imm_predicated;
16407 break;
16408 case ARM::BI__builtin_arm_mve_vsubq_x_s32:
16409 Param0 = Intrinsic::arm_mve_sub_predicated;
16410 break;
16411 case ARM::BI__builtin_arm_mve_vsubq_x_u32:
16412 Param0 = Intrinsic::arm_mve_sub_predicated;
16413 break;
16414 }
16415 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16416 Value *Val1 = UndefValue::get(Val0);
16417 Value *Val2 = EmitScalarExpr(E->getArg(0));
16418 Value *Val3 = EmitScalarExpr(E->getArg(1));
16419 Value *Val4 = EmitScalarExpr(E->getArg(2));
16420 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16421 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
16422 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
16423}
16424case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u32:
16425case ARM::BI__builtin_arm_mve_viwdupq_x_n_u32: {
16426 Intrinsic::ID Param0;
16427 switch (BuiltinID) {
16428 case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u32:
16429 Param0 = Intrinsic::arm_mve_vdwdup_predicated;
16430 break;
16431 case ARM::BI__builtin_arm_mve_viwdupq_x_n_u32:
16432 Param0 = Intrinsic::arm_mve_viwdup_predicated;
16433 break;
16434 }
16435 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16436 Value *Val1 = UndefValue::get(Val0);
16437 Value *Val2 = EmitScalarExpr(E->getArg(0));
16438 Value *Val3 = EmitScalarExpr(E->getArg(1));
16439 Value *Val4 = EmitScalarExpr(E->getArg(2));
16440 Value *Val5 = EmitScalarExpr(E->getArg(3));
16441 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16442 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16443 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val1, Val2, Val3, Val4, Val7});
16444 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
16445}
16446case ARM::BI__builtin_arm_mve_vrshlq_x_s32:
16447case ARM::BI__builtin_arm_mve_vrshlq_x_u32:
16448case ARM::BI__builtin_arm_mve_vshlq_x_s32:
16449case ARM::BI__builtin_arm_mve_vshlq_x_u32: {
16450 uint32_t Param0;
16451 uint32_t Param1;
16452 switch (BuiltinID) {
16453 case ARM::BI__builtin_arm_mve_vrshlq_x_s32:
16454 Param0 = 1;
16455 Param1 = 0;
16456 break;
16457 case ARM::BI__builtin_arm_mve_vrshlq_x_u32:
16458 Param0 = 1;
16459 Param1 = 1;
16460 break;
16461 case ARM::BI__builtin_arm_mve_vshlq_x_s32:
16462 Param0 = 0;
16463 Param1 = 0;
16464 break;
16465 case ARM::BI__builtin_arm_mve_vshlq_x_u32:
16466 Param0 = 0;
16467 Param1 = 1;
16468 break;
16469 }
16470 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16471 Value *Val1 = UndefValue::get(Val0);
16472 Value *Val2 = EmitScalarExpr(E->getArg(0));
16473 Value *Val3 = EmitScalarExpr(E->getArg(1));
16474 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
16475 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
16476 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
16477 Value *Val7 = EmitScalarExpr(E->getArg(2));
16478 Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
16479 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val8});
16480 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
16481}
16482case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p16:
16483case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p16: {
16484 uint32_t Param0;
16485 switch (BuiltinID) {
16486 case ARM::BI__builtin_arm_mve_vmullbq_poly_x_p16:
16487 Param0 = 0;
16488 break;
16489 case ARM::BI__builtin_arm_mve_vmulltq_poly_x_p16:
16490 Param0 = 1;
16491 break;
16492 }
16493 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16494 Value *Val1 = UndefValue::get(Val0);
16495 Value *Val2 = EmitScalarExpr(E->getArg(0));
16496 Value *Val3 = EmitScalarExpr(E->getArg(1));
16497 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
16498 Value *Val5 = EmitScalarExpr(E->getArg(2));
16499 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16500 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16501 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_mull_poly_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
16502}
16503case ARM::BI__builtin_arm_mve_vabdq_x_s32:
16504case ARM::BI__builtin_arm_mve_vabdq_x_u32:
16505case ARM::BI__builtin_arm_mve_vhaddq_x_s32:
16506case ARM::BI__builtin_arm_mve_vhaddq_x_u32:
16507case ARM::BI__builtin_arm_mve_vhsubq_x_s32:
16508case ARM::BI__builtin_arm_mve_vhsubq_x_u32:
16509case ARM::BI__builtin_arm_mve_vmaxq_x_s32:
16510case ARM::BI__builtin_arm_mve_vmaxq_x_u32:
16511case ARM::BI__builtin_arm_mve_vminq_x_s32:
16512case ARM::BI__builtin_arm_mve_vminq_x_u32:
16513case ARM::BI__builtin_arm_mve_vmulhq_x_s32:
16514case ARM::BI__builtin_arm_mve_vmulhq_x_u32:
16515case ARM::BI__builtin_arm_mve_vrhaddq_x_s32:
16516case ARM::BI__builtin_arm_mve_vrhaddq_x_u32:
16517case ARM::BI__builtin_arm_mve_vrmulhq_x_s32:
16518case ARM::BI__builtin_arm_mve_vrmulhq_x_u32:
16519case ARM::BI__builtin_arm_mve_vrshrq_x_n_s32:
16520case ARM::BI__builtin_arm_mve_vrshrq_x_n_u32:
16521case ARM::BI__builtin_arm_mve_vshrq_x_n_s32:
16522case ARM::BI__builtin_arm_mve_vshrq_x_n_u32: {
16523 uint32_t Param0;
16524 Intrinsic::ID Param1;
16525 switch (BuiltinID) {
16526 case ARM::BI__builtin_arm_mve_vabdq_x_s32:
16527 Param0 = 0;
16528 Param1 = Intrinsic::arm_mve_abd_predicated;
16529 break;
16530 case ARM::BI__builtin_arm_mve_vabdq_x_u32:
16531 Param0 = 1;
16532 Param1 = Intrinsic::arm_mve_abd_predicated;
16533 break;
16534 case ARM::BI__builtin_arm_mve_vhaddq_x_s32:
16535 Param0 = 0;
16536 Param1 = Intrinsic::arm_mve_hadd_predicated;
16537 break;
16538 case ARM::BI__builtin_arm_mve_vhaddq_x_u32:
16539 Param0 = 1;
16540 Param1 = Intrinsic::arm_mve_hadd_predicated;
16541 break;
16542 case ARM::BI__builtin_arm_mve_vhsubq_x_s32:
16543 Param0 = 0;
16544 Param1 = Intrinsic::arm_mve_hsub_predicated;
16545 break;
16546 case ARM::BI__builtin_arm_mve_vhsubq_x_u32:
16547 Param0 = 1;
16548 Param1 = Intrinsic::arm_mve_hsub_predicated;
16549 break;
16550 case ARM::BI__builtin_arm_mve_vmaxq_x_s32:
16551 Param0 = 0;
16552 Param1 = Intrinsic::arm_mve_max_predicated;
16553 break;
16554 case ARM::BI__builtin_arm_mve_vmaxq_x_u32:
16555 Param0 = 1;
16556 Param1 = Intrinsic::arm_mve_max_predicated;
16557 break;
16558 case ARM::BI__builtin_arm_mve_vminq_x_s32:
16559 Param0 = 0;
16560 Param1 = Intrinsic::arm_mve_min_predicated;
16561 break;
16562 case ARM::BI__builtin_arm_mve_vminq_x_u32:
16563 Param0 = 1;
16564 Param1 = Intrinsic::arm_mve_min_predicated;
16565 break;
16566 case ARM::BI__builtin_arm_mve_vmulhq_x_s32:
16567 Param0 = 0;
16568 Param1 = Intrinsic::arm_mve_mulh_predicated;
16569 break;
16570 case ARM::BI__builtin_arm_mve_vmulhq_x_u32:
16571 Param0 = 1;
16572 Param1 = Intrinsic::arm_mve_mulh_predicated;
16573 break;
16574 case ARM::BI__builtin_arm_mve_vrhaddq_x_s32:
16575 Param0 = 0;
16576 Param1 = Intrinsic::arm_mve_rhadd_predicated;
16577 break;
16578 case ARM::BI__builtin_arm_mve_vrhaddq_x_u32:
16579 Param0 = 1;
16580 Param1 = Intrinsic::arm_mve_rhadd_predicated;
16581 break;
16582 case ARM::BI__builtin_arm_mve_vrmulhq_x_s32:
16583 Param0 = 0;
16584 Param1 = Intrinsic::arm_mve_rmulh_predicated;
16585 break;
16586 case ARM::BI__builtin_arm_mve_vrmulhq_x_u32:
16587 Param0 = 1;
16588 Param1 = Intrinsic::arm_mve_rmulh_predicated;
16589 break;
16590 case ARM::BI__builtin_arm_mve_vrshrq_x_n_s32:
16591 Param0 = 0;
16592 Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
16593 break;
16594 case ARM::BI__builtin_arm_mve_vrshrq_x_n_u32:
16595 Param0 = 1;
16596 Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
16597 break;
16598 case ARM::BI__builtin_arm_mve_vshrq_x_n_s32:
16599 Param0 = 0;
16600 Param1 = Intrinsic::arm_mve_shr_imm_predicated;
16601 break;
16602 case ARM::BI__builtin_arm_mve_vshrq_x_n_u32:
16603 Param0 = 1;
16604 Param1 = Intrinsic::arm_mve_shr_imm_predicated;
16605 break;
16606 }
16607 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16608 Value *Val1 = UndefValue::get(Val0);
16609 Value *Val2 = EmitScalarExpr(E->getArg(0));
16610 Value *Val3 = EmitScalarExpr(E->getArg(1));
16611 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
16612 Value *Val5 = EmitScalarExpr(E->getArg(2));
16613 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16614 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16615 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
16616}
16617case ARM::BI__builtin_arm_mve_vmullbq_int_x_s16:
16618case ARM::BI__builtin_arm_mve_vmullbq_int_x_u16:
16619case ARM::BI__builtin_arm_mve_vmulltq_int_x_s16:
16620case ARM::BI__builtin_arm_mve_vmulltq_int_x_u16:
16621case ARM::BI__builtin_arm_mve_vshllbq_x_n_s16:
16622case ARM::BI__builtin_arm_mve_vshllbq_x_n_u16:
16623case ARM::BI__builtin_arm_mve_vshlltq_x_n_s16:
16624case ARM::BI__builtin_arm_mve_vshlltq_x_n_u16: {
16625 uint32_t Param0;
16626 uint32_t Param1;
16627 Intrinsic::ID Param2;
16628 switch (BuiltinID) {
16629 case ARM::BI__builtin_arm_mve_vmullbq_int_x_s16:
16630 Param0 = 0;
16631 Param1 = 0;
16632 Param2 = Intrinsic::arm_mve_mull_int_predicated;
16633 break;
16634 case ARM::BI__builtin_arm_mve_vmullbq_int_x_u16:
16635 Param0 = 1;
16636 Param1 = 0;
16637 Param2 = Intrinsic::arm_mve_mull_int_predicated;
16638 break;
16639 case ARM::BI__builtin_arm_mve_vmulltq_int_x_s16:
16640 Param0 = 0;
16641 Param1 = 1;
16642 Param2 = Intrinsic::arm_mve_mull_int_predicated;
16643 break;
16644 case ARM::BI__builtin_arm_mve_vmulltq_int_x_u16:
16645 Param0 = 1;
16646 Param1 = 1;
16647 Param2 = Intrinsic::arm_mve_mull_int_predicated;
16648 break;
16649 case ARM::BI__builtin_arm_mve_vshllbq_x_n_s16:
16650 Param0 = 0;
16651 Param1 = 0;
16652 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
16653 break;
16654 case ARM::BI__builtin_arm_mve_vshllbq_x_n_u16:
16655 Param0 = 1;
16656 Param1 = 0;
16657 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
16658 break;
16659 case ARM::BI__builtin_arm_mve_vshlltq_x_n_s16:
16660 Param0 = 0;
16661 Param1 = 1;
16662 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
16663 break;
16664 case ARM::BI__builtin_arm_mve_vshlltq_x_n_u16:
16665 Param0 = 1;
16666 Param1 = 1;
16667 Param2 = Intrinsic::arm_mve_vshll_imm_predicated;
16668 break;
16669 }
16670 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16671 Value *Val1 = UndefValue::get(Val0);
16672 Value *Val2 = EmitScalarExpr(E->getArg(0));
16673 Value *Val3 = EmitScalarExpr(E->getArg(1));
16674 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
16675 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
16676 Value *Val6 = EmitScalarExpr(E->getArg(2));
16677 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
16678 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
16679 return Builder.CreateCall(CGM.getIntrinsic(Param2, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val5, Val8, Val1});
16680}
16681case ARM::BI__builtin_arm_mve_vrev64q_x_s32:
16682case ARM::BI__builtin_arm_mve_vrev64q_x_u32: {
16683 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16684 Value *Val1 = UndefValue::get(Val0);
16685 Value *Val2 = EmitScalarExpr(E->getArg(0));
16686 Value *Val3 = llvm::ConstantInt::get(Int32Ty, 64);
16687 Value *Val4 = EmitScalarExpr(E->getArg(1));
16688 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16689 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
16690 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
16691}
16692case ARM::BI__builtin_arm_mve_vcvtq_x_s32_f32:
16693case ARM::BI__builtin_arm_mve_vcvtq_x_u32_f32: {
16694 uint32_t Param0;
16695 switch (BuiltinID) {
16696 case ARM::BI__builtin_arm_mve_vcvtq_x_s32_f32:
16697 Param0 = 0;
16698 break;
16699 case ARM::BI__builtin_arm_mve_vcvtq_x_u32_f32:
16700 Param0 = 1;
16701 break;
16702 }
16703 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16704 Value *Val1 = UndefValue::get(Val0);
16705 Value *Val2 = EmitScalarExpr(E->getArg(0));
16706 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
16707 Value *Val4 = EmitScalarExpr(E->getArg(1));
16708 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16709 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
16710 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fp_int_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val6, Val1});
16711}
16712case ARM::BI__builtin_arm_mve_vmovlbq_x_s16:
16713case ARM::BI__builtin_arm_mve_vmovlbq_x_u16:
16714case ARM::BI__builtin_arm_mve_vmovltq_x_s16:
16715case ARM::BI__builtin_arm_mve_vmovltq_x_u16: {
16716 uint32_t Param0;
16717 uint32_t Param1;
16718 switch (BuiltinID) {
16719 case ARM::BI__builtin_arm_mve_vmovlbq_x_s16:
16720 Param0 = 0;
16721 Param1 = 0;
16722 break;
16723 case ARM::BI__builtin_arm_mve_vmovlbq_x_u16:
16724 Param0 = 1;
16725 Param1 = 0;
16726 break;
16727 case ARM::BI__builtin_arm_mve_vmovltq_x_s16:
16728 Param0 = 0;
16729 Param1 = 1;
16730 break;
16731 case ARM::BI__builtin_arm_mve_vmovltq_x_u16:
16732 Param0 = 1;
16733 Param1 = 1;
16734 break;
16735 }
16736 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16737 Value *Val1 = UndefValue::get(Val0);
16738 Value *Val2 = EmitScalarExpr(E->getArg(0));
16739 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
16740 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param1);
16741 Value *Val5 = EmitScalarExpr(E->getArg(1));
16742 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16743 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16744 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vmovl_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Int16Ty, 8), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val7, Val1});
16745}
16746case ARM::BI__builtin_arm_mve_vandq_x_s32:
16747case ARM::BI__builtin_arm_mve_vandq_x_u32:
16748case ARM::BI__builtin_arm_mve_vbicq_x_s32:
16749case ARM::BI__builtin_arm_mve_vbicq_x_u32:
16750case ARM::BI__builtin_arm_mve_veorq_x_s32:
16751case ARM::BI__builtin_arm_mve_veorq_x_u32:
16752case ARM::BI__builtin_arm_mve_vornq_x_s32:
16753case ARM::BI__builtin_arm_mve_vornq_x_u32:
16754case ARM::BI__builtin_arm_mve_vorrq_x_s32:
16755case ARM::BI__builtin_arm_mve_vorrq_x_u32: {
16756 Intrinsic::ID Param0;
16757 switch (BuiltinID) {
16758 case ARM::BI__builtin_arm_mve_vandq_x_s32:
16759 Param0 = Intrinsic::arm_mve_and_predicated;
16760 break;
16761 case ARM::BI__builtin_arm_mve_vandq_x_u32:
16762 Param0 = Intrinsic::arm_mve_and_predicated;
16763 break;
16764 case ARM::BI__builtin_arm_mve_vbicq_x_s32:
16765 Param0 = Intrinsic::arm_mve_bic_predicated;
16766 break;
16767 case ARM::BI__builtin_arm_mve_vbicq_x_u32:
16768 Param0 = Intrinsic::arm_mve_bic_predicated;
16769 break;
16770 case ARM::BI__builtin_arm_mve_veorq_x_s32:
16771 Param0 = Intrinsic::arm_mve_eor_predicated;
16772 break;
16773 case ARM::BI__builtin_arm_mve_veorq_x_u32:
16774 Param0 = Intrinsic::arm_mve_eor_predicated;
16775 break;
16776 case ARM::BI__builtin_arm_mve_vornq_x_s32:
16777 Param0 = Intrinsic::arm_mve_orn_predicated;
16778 break;
16779 case ARM::BI__builtin_arm_mve_vornq_x_u32:
16780 Param0 = Intrinsic::arm_mve_orn_predicated;
16781 break;
16782 case ARM::BI__builtin_arm_mve_vorrq_x_s32:
16783 Param0 = Intrinsic::arm_mve_orr_predicated;
16784 break;
16785 case ARM::BI__builtin_arm_mve_vorrq_x_u32:
16786 Param0 = Intrinsic::arm_mve_orr_predicated;
16787 break;
16788 }
16789 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16790 Value *Val1 = UndefValue::get(Val0);
16791 Value *Val2 = EmitScalarExpr(E->getArg(0));
16792 llvm::Type *Val3 = llvm::FixedVectorType::get(Int32Ty, 4);
16793 Value *Val4 = Builder.CreateBitCast(Val2, Val3);
16794 Value *Val5 = EmitScalarExpr(E->getArg(1));
16795 llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
16796 Value *Val7 = Builder.CreateBitCast(Val5, Val6);
16797 Value *Val8 = EmitScalarExpr(E->getArg(2));
16798 Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
16799 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val9});
16800 llvm::Type *Val11 = llvm::FixedVectorType::get(Int32Ty, 4);
16801 Value *Val12 = Builder.CreateBitCast(Val1, Val11);
16802 Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val4, Val7, Val10, Val12});
16803 llvm::Type *Val14 = llvm::FixedVectorType::get(Int32Ty, 4);
16804 return Builder.CreateBitCast(Val13, Val14);
16805}
16806case ARM::BI__builtin_arm_mve_vdupq_x_n_s32:
16807case ARM::BI__builtin_arm_mve_vdupq_x_n_u32: {
16808 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16809 Value *Val1 = UndefValue::get(Val0);
16810 Value *Val2 = EmitScalarExpr(E->getArg(1));
16811 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
16812 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
16813 Value *Val5 = EmitScalarExpr(E->getArg(0));
16814 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
16815 return Builder.CreateSelect(Val4, Val6, Val1);
16816}
16817case ARM::BI__builtin_arm_mve_vmvnq_x_n_s32:
16818case ARM::BI__builtin_arm_mve_vmvnq_x_n_u32: {
16819 bool Param0;
16820 switch (BuiltinID) {
16821 case ARM::BI__builtin_arm_mve_vmvnq_x_n_s32:
16822 Param0 = true;
16823 break;
16824 case ARM::BI__builtin_arm_mve_vmvnq_x_n_u32:
16825 Param0 = false;
16826 break;
16827 }
16828 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16829 Value *Val1 = UndefValue::get(Val0);
16830 Value *Val2 = EmitScalarExpr(E->getArg(1));
16831 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
16832 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val3});
16833 Value *Val5 = EmitScalarExpr(E->getArg(0));
16834 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, Param0);
16835 Value *Val7 = ARMMVEVectorSplat(Builder, Val6);
16836 Value *Val8 = Builder.CreateNot(Val7);
16837 return Builder.CreateSelect(Val4, Val8, Val1);
16838}
16839case ARM::BI__builtin_arm_mve_vcvtaq_x_s32_f32:
16840case ARM::BI__builtin_arm_mve_vcvtaq_x_u32_f32:
16841case ARM::BI__builtin_arm_mve_vcvtmq_x_s32_f32:
16842case ARM::BI__builtin_arm_mve_vcvtmq_x_u32_f32:
16843case ARM::BI__builtin_arm_mve_vcvtnq_x_s32_f32:
16844case ARM::BI__builtin_arm_mve_vcvtnq_x_u32_f32:
16845case ARM::BI__builtin_arm_mve_vcvtpq_x_s32_f32:
16846case ARM::BI__builtin_arm_mve_vcvtpq_x_u32_f32: {
16847 uint32_t Param0;
16848 Intrinsic::ID Param1;
16849 switch (BuiltinID) {
16850 case ARM::BI__builtin_arm_mve_vcvtaq_x_s32_f32:
16851 Param0 = 0;
16852 Param1 = Intrinsic::arm_mve_vcvta_predicated;
16853 break;
16854 case ARM::BI__builtin_arm_mve_vcvtaq_x_u32_f32:
16855 Param0 = 1;
16856 Param1 = Intrinsic::arm_mve_vcvta_predicated;
16857 break;
16858 case ARM::BI__builtin_arm_mve_vcvtmq_x_s32_f32:
16859 Param0 = 0;
16860 Param1 = Intrinsic::arm_mve_vcvtm_predicated;
16861 break;
16862 case ARM::BI__builtin_arm_mve_vcvtmq_x_u32_f32:
16863 Param0 = 1;
16864 Param1 = Intrinsic::arm_mve_vcvtm_predicated;
16865 break;
16866 case ARM::BI__builtin_arm_mve_vcvtnq_x_s32_f32:
16867 Param0 = 0;
16868 Param1 = Intrinsic::arm_mve_vcvtn_predicated;
16869 break;
16870 case ARM::BI__builtin_arm_mve_vcvtnq_x_u32_f32:
16871 Param0 = 1;
16872 Param1 = Intrinsic::arm_mve_vcvtn_predicated;
16873 break;
16874 case ARM::BI__builtin_arm_mve_vcvtpq_x_s32_f32:
16875 Param0 = 0;
16876 Param1 = Intrinsic::arm_mve_vcvtp_predicated;
16877 break;
16878 case ARM::BI__builtin_arm_mve_vcvtpq_x_u32_f32:
16879 Param0 = 1;
16880 Param1 = Intrinsic::arm_mve_vcvtp_predicated;
16881 break;
16882 }
16883 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16884 Value *Val1 = UndefValue::get(Val0);
16885 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
16886 Value *Val3 = EmitScalarExpr(E->getArg(0));
16887 Value *Val4 = EmitScalarExpr(E->getArg(1));
16888 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
16889 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val5});
16890 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val6});
16891}
16892case ARM::BI__builtin_arm_mve_vcvtq_x_n_s32_f32:
16893case ARM::BI__builtin_arm_mve_vcvtq_x_n_u32_f32: {
16894 uint32_t Param0;
16895 switch (BuiltinID) {
16896 case ARM::BI__builtin_arm_mve_vcvtq_x_n_s32_f32:
16897 Param0 = 0;
16898 break;
16899 case ARM::BI__builtin_arm_mve_vcvtq_x_n_u32_f32:
16900 Param0 = 1;
16901 break;
16902 }
16903 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16904 Value *Val1 = UndefValue::get(Val0);
16905 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
16906 Value *Val3 = EmitScalarExpr(E->getArg(0));
16907 Value *Val4 = EmitScalarExpr(E->getArg(1));
16908 Value *Val5 = EmitScalarExpr(E->getArg(2));
16909 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
16910 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val6});
16911 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcvt_fix_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(FloatTy, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val1, Val3, Val4, Val7});
16912}
16913case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s32:
16914case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u32:
16915case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s32:
16916case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u32:
16917case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s32:
16918case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s32: {
16919 uint32_t Param0;
16920 uint32_t Param1;
16921 switch (BuiltinID) {
16922 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s32:
16923 Param0 = 1;
16924 Param1 = 1;
16925 break;
16926 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u32:
16927 Param0 = 1;
16928 Param1 = 1;
16929 break;
16930 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s32:
16931 Param0 = 1;
16932 Param1 = 0;
16933 break;
16934 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u32:
16935 Param0 = 1;
16936 Param1 = 0;
16937 break;
16938 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s32:
16939 Param0 = 0;
16940 Param1 = 1;
16941 break;
16942 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s32:
16943 Param0 = 0;
16944 Param1 = 0;
16945 break;
16946 }
16947 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16948 Value *Val1 = UndefValue::get(Val0);
16949 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
16950 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
16951 Value *Val4 = EmitScalarExpr(E->getArg(0));
16952 Value *Val5 = EmitScalarExpr(E->getArg(1));
16953 Value *Val6 = EmitScalarExpr(E->getArg(2));
16954 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
16955 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
16956 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val1, Val4, Val5, Val8});
16957}
16958case ARM::BI__builtin_arm_mve_vnegq_s32: {
16959 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16960 Value *Val1 = llvm::Constant::getNullValue(Val0);
16961 Value *Val2 = EmitScalarExpr(E->getArg(0));
16962 return Builder.CreateSub(Val1, Val2);
16963}
16964case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s32:
16965case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u32:
16966case ARM::BI__builtin_arm_mve_vuninitializedq_s32:
16967case ARM::BI__builtin_arm_mve_vuninitializedq_u32: {
16968 llvm::Type *Val0 = llvm::FixedVectorType::get(Int32Ty, 4);
16969 return UndefValue::get(Val0);
16970}
16971case ARM::BI__builtin_arm_mve_vcreateq_f32: {
16972 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
16973 Value *Val1 = UndefValue::get(Val0);
16974 Value *Val2 = EmitScalarExpr(E->getArg(0));
16975 Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
16976 Value *Val4 = EmitScalarExpr(E->getArg(1));
16977 Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
16978 llvm::Type *Val6 = llvm::FixedVectorType::get(FloatTy, 4);
16979 return Builder.CreateBitCast(Val5, Val6);
16980}
16981case ARM::BI__builtin_arm_mve_vcreateq_f16: {
16982 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
16983 Value *Val1 = UndefValue::get(Val0);
16984 Value *Val2 = EmitScalarExpr(E->getArg(0));
16985 Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
16986 Value *Val4 = EmitScalarExpr(E->getArg(1));
16987 Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
16988 llvm::Type *Val6 = llvm::FixedVectorType::get(HalfTy, 8);
16989 return Builder.CreateBitCast(Val5, Val6);
16990}
16991case ARM::BI__builtin_arm_mve_vcreateq_s16:
16992case ARM::BI__builtin_arm_mve_vcreateq_u16: {
16993 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
16994 Value *Val1 = UndefValue::get(Val0);
16995 Value *Val2 = EmitScalarExpr(E->getArg(0));
16996 Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
16997 Value *Val4 = EmitScalarExpr(E->getArg(1));
16998 Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
16999 llvm::Type *Val6 = llvm::FixedVectorType::get(Int16Ty, 8);
17000 return Builder.CreateBitCast(Val5, Val6);
17001}
17002case ARM::BI__builtin_arm_mve_vcreateq_s32:
17003case ARM::BI__builtin_arm_mve_vcreateq_u32: {
17004 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
17005 Value *Val1 = UndefValue::get(Val0);
17006 Value *Val2 = EmitScalarExpr(E->getArg(0));
17007 Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
17008 Value *Val4 = EmitScalarExpr(E->getArg(1));
17009 Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
17010 llvm::Type *Val6 = llvm::FixedVectorType::get(Int32Ty, 4);
17011 return Builder.CreateBitCast(Val5, Val6);
17012}
17013case ARM::BI__builtin_arm_mve_vcreateq_s64:
17014case ARM::BI__builtin_arm_mve_vcreateq_u64: {
17015 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
17016 Value *Val1 = UndefValue::get(Val0);
17017 Value *Val2 = EmitScalarExpr(E->getArg(0));
17018 Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
17019 Value *Val4 = EmitScalarExpr(E->getArg(1));
17020 Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
17021 llvm::Type *Val6 = llvm::FixedVectorType::get(Int64Ty, 2);
17022 return Builder.CreateBitCast(Val5, Val6);
17023}
17024case ARM::BI__builtin_arm_mve_vcreateq_s8:
17025case ARM::BI__builtin_arm_mve_vcreateq_u8: {
17026 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
17027 Value *Val1 = UndefValue::get(Val0);
17028 Value *Val2 = EmitScalarExpr(E->getArg(0));
17029 Value *Val3 = Builder.CreateInsertElement(Val1, Val2, static_cast<uint64_t>(0));
17030 Value *Val4 = EmitScalarExpr(E->getArg(1));
17031 Value *Val5 = Builder.CreateInsertElement(Val3, Val4, static_cast<uint64_t>(1));
17032 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
17033 return Builder.CreateBitCast(Val5, Val6);
17034}
17035case ARM::BI__builtin_arm_mve_vmullbq_int_x_s32:
17036case ARM::BI__builtin_arm_mve_vmullbq_int_x_u32:
17037case ARM::BI__builtin_arm_mve_vmulltq_int_x_s32:
17038case ARM::BI__builtin_arm_mve_vmulltq_int_x_u32: {
17039 uint32_t Param0;
17040 uint32_t Param1;
17041 switch (BuiltinID) {
17042 case ARM::BI__builtin_arm_mve_vmullbq_int_x_s32:
17043 Param0 = 0;
17044 Param1 = 0;
17045 break;
17046 case ARM::BI__builtin_arm_mve_vmullbq_int_x_u32:
17047 Param0 = 1;
17048 Param1 = 0;
17049 break;
17050 case ARM::BI__builtin_arm_mve_vmulltq_int_x_s32:
17051 Param0 = 0;
17052 Param1 = 1;
17053 break;
17054 case ARM::BI__builtin_arm_mve_vmulltq_int_x_u32:
17055 Param0 = 1;
17056 Param1 = 1;
17057 break;
17058 }
17059 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
17060 Value *Val1 = UndefValue::get(Val0);
17061 Value *Val2 = EmitScalarExpr(E->getArg(0));
17062 Value *Val3 = EmitScalarExpr(E->getArg(1));
17063 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
17064 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param1);
17065 Value *Val6 = EmitScalarExpr(E->getArg(2));
17066 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
17067 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val7});
17068 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_mull_int_predicated, {llvm::FixedVectorType::get(Int64Ty, 2), llvm::FixedVectorType::get(Int32Ty, 4), llvm::FixedVectorType::get(Builder.getInt1Ty(), 4)}), {Val2, Val3, Val4, Val5, Val8, Val1});
17069}
17070case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s64:
17071case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u64:
17072case ARM::BI__builtin_arm_mve_vuninitializedq_s64:
17073case ARM::BI__builtin_arm_mve_vuninitializedq_u64: {
17074 llvm::Type *Val0 = llvm::FixedVectorType::get(Int64Ty, 2);
17075 return UndefValue::get(Val0);
17076}
17077case ARM::BI__builtin_arm_mve_vddupq_x_wb_u8:
17078case ARM::BI__builtin_arm_mve_vidupq_x_wb_u8: {
17079 Intrinsic::ID Param0;
17080 switch (BuiltinID) {
17081 case ARM::BI__builtin_arm_mve_vddupq_x_wb_u8:
17082 Param0 = Intrinsic::arm_mve_vddup_predicated;
17083 break;
17084 case ARM::BI__builtin_arm_mve_vidupq_x_wb_u8:
17085 Param0 = Intrinsic::arm_mve_vidup_predicated;
17086 break;
17087 }
17088 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17089 Value *Val1 = UndefValue::get(Val0);
17090 Address Val2 = EmitPointerWithAlignment(E->getArg(0));
17091 Value *Val3 = Builder.CreateLoad(Val2);
17092 Value *Val4 = EmitScalarExpr(E->getArg(1));
17093 Value *Val5 = EmitScalarExpr(E->getArg(2));
17094 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
17095 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
17096 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val3, Val4, Val7});
17097 Value *Val9 = Builder.CreateExtractValue(Val8, static_cast<unsigned>(1));
17098 Builder.CreateStore(Val9, Val2);
17099 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
17100}
17101case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u8:
17102case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u8: {
17103 Intrinsic::ID Param0;
17104 switch (BuiltinID) {
17105 case ARM::BI__builtin_arm_mve_vdwdupq_x_wb_u8:
17106 Param0 = Intrinsic::arm_mve_vdwdup_predicated;
17107 break;
17108 case ARM::BI__builtin_arm_mve_viwdupq_x_wb_u8:
17109 Param0 = Intrinsic::arm_mve_viwdup_predicated;
17110 break;
17111 }
17112 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17113 Value *Val1 = UndefValue::get(Val0);
17114 Address Val2 = EmitPointerWithAlignment(E->getArg(0));
17115 Value *Val3 = Builder.CreateLoad(Val2);
17116 Value *Val4 = EmitScalarExpr(E->getArg(1));
17117 Value *Val5 = EmitScalarExpr(E->getArg(2));
17118 Value *Val6 = EmitScalarExpr(E->getArg(3));
17119 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
17120 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
17121 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val3, Val4, Val5, Val8});
17122 Value *Val10 = Builder.CreateExtractValue(Val9, static_cast<unsigned>(1));
17123 Builder.CreateStore(Val10, Val2);
17124 return Builder.CreateExtractValue(Val9, static_cast<unsigned>(0));
17125}
17126case ARM::BI__builtin_arm_mve_vaddq_x_n_s8:
17127case ARM::BI__builtin_arm_mve_vaddq_x_n_u8:
17128case ARM::BI__builtin_arm_mve_vmulq_x_n_s8:
17129case ARM::BI__builtin_arm_mve_vmulq_x_n_u8:
17130case ARM::BI__builtin_arm_mve_vsubq_x_n_s8:
17131case ARM::BI__builtin_arm_mve_vsubq_x_n_u8: {
17132 Intrinsic::ID Param0;
17133 switch (BuiltinID) {
17134 case ARM::BI__builtin_arm_mve_vaddq_x_n_s8:
17135 Param0 = Intrinsic::arm_mve_add_predicated;
17136 break;
17137 case ARM::BI__builtin_arm_mve_vaddq_x_n_u8:
17138 Param0 = Intrinsic::arm_mve_add_predicated;
17139 break;
17140 case ARM::BI__builtin_arm_mve_vmulq_x_n_s8:
17141 Param0 = Intrinsic::arm_mve_mul_predicated;
17142 break;
17143 case ARM::BI__builtin_arm_mve_vmulq_x_n_u8:
17144 Param0 = Intrinsic::arm_mve_mul_predicated;
17145 break;
17146 case ARM::BI__builtin_arm_mve_vsubq_x_n_s8:
17147 Param0 = Intrinsic::arm_mve_sub_predicated;
17148 break;
17149 case ARM::BI__builtin_arm_mve_vsubq_x_n_u8:
17150 Param0 = Intrinsic::arm_mve_sub_predicated;
17151 break;
17152 }
17153 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17154 Value *Val1 = UndefValue::get(Val0);
17155 Value *Val2 = EmitScalarExpr(E->getArg(0));
17156 Value *Val3 = EmitScalarExpr(E->getArg(1));
17157 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
17158 Value *Val5 = EmitScalarExpr(E->getArg(2));
17159 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
17160 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
17161 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val4, Val7, Val1});
17162}
17163case ARM::BI__builtin_arm_mve_vhaddq_x_n_s8:
17164case ARM::BI__builtin_arm_mve_vhaddq_x_n_u8:
17165case ARM::BI__builtin_arm_mve_vhsubq_x_n_s8:
17166case ARM::BI__builtin_arm_mve_vhsubq_x_n_u8: {
17167 uint32_t Param0;
17168 Intrinsic::ID Param1;
17169 switch (BuiltinID) {
17170 case ARM::BI__builtin_arm_mve_vhaddq_x_n_s8:
17171 Param0 = 0;
17172 Param1 = Intrinsic::arm_mve_hadd_predicated;
17173 break;
17174 case ARM::BI__builtin_arm_mve_vhaddq_x_n_u8:
17175 Param0 = 1;
17176 Param1 = Intrinsic::arm_mve_hadd_predicated;
17177 break;
17178 case ARM::BI__builtin_arm_mve_vhsubq_x_n_s8:
17179 Param0 = 0;
17180 Param1 = Intrinsic::arm_mve_hsub_predicated;
17181 break;
17182 case ARM::BI__builtin_arm_mve_vhsubq_x_n_u8:
17183 Param0 = 1;
17184 Param1 = Intrinsic::arm_mve_hsub_predicated;
17185 break;
17186 }
17187 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17188 Value *Val1 = UndefValue::get(Val0);
17189 Value *Val2 = EmitScalarExpr(E->getArg(0));
17190 Value *Val3 = EmitScalarExpr(E->getArg(1));
17191 Value *Val4 = ARMMVEVectorSplat(Builder, Val3);
17192 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
17193 Value *Val6 = EmitScalarExpr(E->getArg(2));
17194 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
17195 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
17196 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val4, Val5, Val8, Val1});
17197}
17198case ARM::BI__builtin_arm_mve_vabsq_x_s8:
17199case ARM::BI__builtin_arm_mve_vclsq_x_s8:
17200case ARM::BI__builtin_arm_mve_vclzq_x_s8:
17201case ARM::BI__builtin_arm_mve_vclzq_x_u8:
17202case ARM::BI__builtin_arm_mve_vmvnq_x_s8:
17203case ARM::BI__builtin_arm_mve_vmvnq_x_u8:
17204case ARM::BI__builtin_arm_mve_vnegq_x_s8: {
17205 Intrinsic::ID Param0;
17206 switch (BuiltinID) {
17207 case ARM::BI__builtin_arm_mve_vabsq_x_s8:
17208 Param0 = Intrinsic::arm_mve_abs_predicated;
17209 break;
17210 case ARM::BI__builtin_arm_mve_vclsq_x_s8:
17211 Param0 = Intrinsic::arm_mve_cls_predicated;
17212 break;
17213 case ARM::BI__builtin_arm_mve_vclzq_x_s8:
17214 Param0 = Intrinsic::arm_mve_clz_predicated;
17215 break;
17216 case ARM::BI__builtin_arm_mve_vclzq_x_u8:
17217 Param0 = Intrinsic::arm_mve_clz_predicated;
17218 break;
17219 case ARM::BI__builtin_arm_mve_vmvnq_x_s8:
17220 Param0 = Intrinsic::arm_mve_mvn_predicated;
17221 break;
17222 case ARM::BI__builtin_arm_mve_vmvnq_x_u8:
17223 Param0 = Intrinsic::arm_mve_mvn_predicated;
17224 break;
17225 case ARM::BI__builtin_arm_mve_vnegq_x_s8:
17226 Param0 = Intrinsic::arm_mve_neg_predicated;
17227 break;
17228 }
17229 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17230 Value *Val1 = UndefValue::get(Val0);
17231 Value *Val2 = EmitScalarExpr(E->getArg(0));
17232 Value *Val3 = EmitScalarExpr(E->getArg(1));
17233 Value *Val4 = Builder.CreateIntCast(Val3, Int32Ty, false);
17234 Value *Val5 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val4});
17235 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val5, Val1});
17236}
17237case ARM::BI__builtin_arm_mve_vddupq_x_n_u8:
17238case ARM::BI__builtin_arm_mve_vidupq_x_n_u8: {
17239 Intrinsic::ID Param0;
17240 switch (BuiltinID) {
17241 case ARM::BI__builtin_arm_mve_vddupq_x_n_u8:
17242 Param0 = Intrinsic::arm_mve_vddup_predicated;
17243 break;
17244 case ARM::BI__builtin_arm_mve_vidupq_x_n_u8:
17245 Param0 = Intrinsic::arm_mve_vidup_predicated;
17246 break;
17247 }
17248 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17249 Value *Val1 = UndefValue::get(Val0);
17250 Value *Val2 = EmitScalarExpr(E->getArg(0));
17251 Value *Val3 = EmitScalarExpr(E->getArg(1));
17252 Value *Val4 = EmitScalarExpr(E->getArg(2));
17253 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
17254 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
17255 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val2, Val3, Val6});
17256 return Builder.CreateExtractValue(Val7, static_cast<unsigned>(0));
17257}
17258case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s8:
17259case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u8: {
17260 Intrinsic::ID Param0;
17261 switch (BuiltinID) {
17262 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_s8:
17263 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
17264 break;
17265 case ARM::BI__builtin_arm_mve_vbrsrq_x_n_u8:
17266 Param0 = Intrinsic::arm_mve_vbrsr_predicated;
17267 break;
17268 }
17269 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17270 Value *Val1 = UndefValue::get(Val0);
17271 Value *Val2 = EmitScalarExpr(E->getArg(0));
17272 Value *Val3 = EmitScalarExpr(E->getArg(1));
17273 Value *Val4 = EmitScalarExpr(E->getArg(2));
17274 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
17275 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
17276 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val2, Val3, Val6});
17277}
17278case ARM::BI__builtin_arm_mve_vaddq_x_s8:
17279case ARM::BI__builtin_arm_mve_vaddq_x_u8:
17280case ARM::BI__builtin_arm_mve_vmulq_x_s8:
17281case ARM::BI__builtin_arm_mve_vmulq_x_u8:
17282case ARM::BI__builtin_arm_mve_vshlq_x_n_s8:
17283case ARM::BI__builtin_arm_mve_vshlq_x_n_u8:
17284case ARM::BI__builtin_arm_mve_vsubq_x_s8:
17285case ARM::BI__builtin_arm_mve_vsubq_x_u8: {
17286 Intrinsic::ID Param0;
17287 switch (BuiltinID) {
17288 case ARM::BI__builtin_arm_mve_vaddq_x_s8:
17289 Param0 = Intrinsic::arm_mve_add_predicated;
17290 break;
17291 case ARM::BI__builtin_arm_mve_vaddq_x_u8:
17292 Param0 = Intrinsic::arm_mve_add_predicated;
17293 break;
17294 case ARM::BI__builtin_arm_mve_vmulq_x_s8:
17295 Param0 = Intrinsic::arm_mve_mul_predicated;
17296 break;
17297 case ARM::BI__builtin_arm_mve_vmulq_x_u8:
17298 Param0 = Intrinsic::arm_mve_mul_predicated;
17299 break;
17300 case ARM::BI__builtin_arm_mve_vshlq_x_n_s8:
17301 Param0 = Intrinsic::arm_mve_shl_imm_predicated;
17302 break;
17303 case ARM::BI__builtin_arm_mve_vshlq_x_n_u8:
17304 Param0 = Intrinsic::arm_mve_shl_imm_predicated;
17305 break;
17306 case ARM::BI__builtin_arm_mve_vsubq_x_s8:
17307 Param0 = Intrinsic::arm_mve_sub_predicated;
17308 break;
17309 case ARM::BI__builtin_arm_mve_vsubq_x_u8:
17310 Param0 = Intrinsic::arm_mve_sub_predicated;
17311 break;
17312 }
17313 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17314 Value *Val1 = UndefValue::get(Val0);
17315 Value *Val2 = EmitScalarExpr(E->getArg(0));
17316 Value *Val3 = EmitScalarExpr(E->getArg(1));
17317 Value *Val4 = EmitScalarExpr(E->getArg(2));
17318 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
17319 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
17320 return Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val6, Val1});
17321}
17322case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u8:
17323case ARM::BI__builtin_arm_mve_viwdupq_x_n_u8: {
17324 Intrinsic::ID Param0;
17325 switch (BuiltinID) {
17326 case ARM::BI__builtin_arm_mve_vdwdupq_x_n_u8:
17327 Param0 = Intrinsic::arm_mve_vdwdup_predicated;
17328 break;
17329 case ARM::BI__builtin_arm_mve_viwdupq_x_n_u8:
17330 Param0 = Intrinsic::arm_mve_viwdup_predicated;
17331 break;
17332 }
17333 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17334 Value *Val1 = UndefValue::get(Val0);
17335 Value *Val2 = EmitScalarExpr(E->getArg(0));
17336 Value *Val3 = EmitScalarExpr(E->getArg(1));
17337 Value *Val4 = EmitScalarExpr(E->getArg(2));
17338 Value *Val5 = EmitScalarExpr(E->getArg(3));
17339 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
17340 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
17341 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val1, Val2, Val3, Val4, Val7});
17342 return Builder.CreateExtractValue(Val8, static_cast<unsigned>(0));
17343}
17344case ARM::BI__builtin_arm_mve_vrshlq_x_s8:
17345case ARM::BI__builtin_arm_mve_vrshlq_x_u8:
17346case ARM::BI__builtin_arm_mve_vshlq_x_s8:
17347case ARM::BI__builtin_arm_mve_vshlq_x_u8: {
17348 uint32_t Param0;
17349 uint32_t Param1;
17350 switch (BuiltinID) {
17351 case ARM::BI__builtin_arm_mve_vrshlq_x_s8:
17352 Param0 = 1;
17353 Param1 = 0;
17354 break;
17355 case ARM::BI__builtin_arm_mve_vrshlq_x_u8:
17356 Param0 = 1;
17357 Param1 = 1;
17358 break;
17359 case ARM::BI__builtin_arm_mve_vshlq_x_s8:
17360 Param0 = 0;
17361 Param1 = 0;
17362 break;
17363 case ARM::BI__builtin_arm_mve_vshlq_x_u8:
17364 Param0 = 0;
17365 Param1 = 1;
17366 break;
17367 }
17368 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17369 Value *Val1 = UndefValue::get(Val0);
17370 Value *Val2 = EmitScalarExpr(E->getArg(0));
17371 Value *Val3 = EmitScalarExpr(E->getArg(1));
17372 Value *Val4 = llvm::ConstantInt::get(Int32Ty, 0);
17373 Value *Val5 = llvm::ConstantInt::get(Int32Ty, Param0);
17374 Value *Val6 = llvm::ConstantInt::get(Int32Ty, Param1);
17375 Value *Val7 = EmitScalarExpr(E->getArg(2));
17376 Value *Val8 = Builder.CreateIntCast(Val7, Int32Ty, false);
17377 Value *Val9 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val8});
17378 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vshl_vector_predicated, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val4, Val5, Val6, Val9, Val1});
17379}
17380case ARM::BI__builtin_arm_mve_vabdq_x_s8:
17381case ARM::BI__builtin_arm_mve_vabdq_x_u8:
17382case ARM::BI__builtin_arm_mve_vhaddq_x_s8:
17383case ARM::BI__builtin_arm_mve_vhaddq_x_u8:
17384case ARM::BI__builtin_arm_mve_vhsubq_x_s8:
17385case ARM::BI__builtin_arm_mve_vhsubq_x_u8:
17386case ARM::BI__builtin_arm_mve_vmaxq_x_s8:
17387case ARM::BI__builtin_arm_mve_vmaxq_x_u8:
17388case ARM::BI__builtin_arm_mve_vminq_x_s8:
17389case ARM::BI__builtin_arm_mve_vminq_x_u8:
17390case ARM::BI__builtin_arm_mve_vmulhq_x_s8:
17391case ARM::BI__builtin_arm_mve_vmulhq_x_u8:
17392case ARM::BI__builtin_arm_mve_vrhaddq_x_s8:
17393case ARM::BI__builtin_arm_mve_vrhaddq_x_u8:
17394case ARM::BI__builtin_arm_mve_vrmulhq_x_s8:
17395case ARM::BI__builtin_arm_mve_vrmulhq_x_u8:
17396case ARM::BI__builtin_arm_mve_vrshrq_x_n_s8:
17397case ARM::BI__builtin_arm_mve_vrshrq_x_n_u8:
17398case ARM::BI__builtin_arm_mve_vshrq_x_n_s8:
17399case ARM::BI__builtin_arm_mve_vshrq_x_n_u8: {
17400 uint32_t Param0;
17401 Intrinsic::ID Param1;
17402 switch (BuiltinID) {
17403 case ARM::BI__builtin_arm_mve_vabdq_x_s8:
17404 Param0 = 0;
17405 Param1 = Intrinsic::arm_mve_abd_predicated;
17406 break;
17407 case ARM::BI__builtin_arm_mve_vabdq_x_u8:
17408 Param0 = 1;
17409 Param1 = Intrinsic::arm_mve_abd_predicated;
17410 break;
17411 case ARM::BI__builtin_arm_mve_vhaddq_x_s8:
17412 Param0 = 0;
17413 Param1 = Intrinsic::arm_mve_hadd_predicated;
17414 break;
17415 case ARM::BI__builtin_arm_mve_vhaddq_x_u8:
17416 Param0 = 1;
17417 Param1 = Intrinsic::arm_mve_hadd_predicated;
17418 break;
17419 case ARM::BI__builtin_arm_mve_vhsubq_x_s8:
17420 Param0 = 0;
17421 Param1 = Intrinsic::arm_mve_hsub_predicated;
17422 break;
17423 case ARM::BI__builtin_arm_mve_vhsubq_x_u8:
17424 Param0 = 1;
17425 Param1 = Intrinsic::arm_mve_hsub_predicated;
17426 break;
17427 case ARM::BI__builtin_arm_mve_vmaxq_x_s8:
17428 Param0 = 0;
17429 Param1 = Intrinsic::arm_mve_max_predicated;
17430 break;
17431 case ARM::BI__builtin_arm_mve_vmaxq_x_u8:
17432 Param0 = 1;
17433 Param1 = Intrinsic::arm_mve_max_predicated;
17434 break;
17435 case ARM::BI__builtin_arm_mve_vminq_x_s8:
17436 Param0 = 0;
17437 Param1 = Intrinsic::arm_mve_min_predicated;
17438 break;
17439 case ARM::BI__builtin_arm_mve_vminq_x_u8:
17440 Param0 = 1;
17441 Param1 = Intrinsic::arm_mve_min_predicated;
17442 break;
17443 case ARM::BI__builtin_arm_mve_vmulhq_x_s8:
17444 Param0 = 0;
17445 Param1 = Intrinsic::arm_mve_mulh_predicated;
17446 break;
17447 case ARM::BI__builtin_arm_mve_vmulhq_x_u8:
17448 Param0 = 1;
17449 Param1 = Intrinsic::arm_mve_mulh_predicated;
17450 break;
17451 case ARM::BI__builtin_arm_mve_vrhaddq_x_s8:
17452 Param0 = 0;
17453 Param1 = Intrinsic::arm_mve_rhadd_predicated;
17454 break;
17455 case ARM::BI__builtin_arm_mve_vrhaddq_x_u8:
17456 Param0 = 1;
17457 Param1 = Intrinsic::arm_mve_rhadd_predicated;
17458 break;
17459 case ARM::BI__builtin_arm_mve_vrmulhq_x_s8:
17460 Param0 = 0;
17461 Param1 = Intrinsic::arm_mve_rmulh_predicated;
17462 break;
17463 case ARM::BI__builtin_arm_mve_vrmulhq_x_u8:
17464 Param0 = 1;
17465 Param1 = Intrinsic::arm_mve_rmulh_predicated;
17466 break;
17467 case ARM::BI__builtin_arm_mve_vrshrq_x_n_s8:
17468 Param0 = 0;
17469 Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
17470 break;
17471 case ARM::BI__builtin_arm_mve_vrshrq_x_n_u8:
17472 Param0 = 1;
17473 Param1 = Intrinsic::arm_mve_vrshr_imm_predicated;
17474 break;
17475 case ARM::BI__builtin_arm_mve_vshrq_x_n_s8:
17476 Param0 = 0;
17477 Param1 = Intrinsic::arm_mve_shr_imm_predicated;
17478 break;
17479 case ARM::BI__builtin_arm_mve_vshrq_x_n_u8:
17480 Param0 = 1;
17481 Param1 = Intrinsic::arm_mve_shr_imm_predicated;
17482 break;
17483 }
17484 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17485 Value *Val1 = UndefValue::get(Val0);
17486 Value *Val2 = EmitScalarExpr(E->getArg(0));
17487 Value *Val3 = EmitScalarExpr(E->getArg(1));
17488 Value *Val4 = llvm::ConstantInt::get(Int32Ty, Param0);
17489 Value *Val5 = EmitScalarExpr(E->getArg(2));
17490 Value *Val6 = Builder.CreateIntCast(Val5, Int32Ty, false);
17491 Value *Val7 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val6});
17492 return Builder.CreateCall(CGM.getIntrinsic(Param1, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val4, Val7, Val1});
17493}
17494case ARM::BI__builtin_arm_mve_vrev16q_x_s8:
17495case ARM::BI__builtin_arm_mve_vrev16q_x_u8:
17496case ARM::BI__builtin_arm_mve_vrev32q_x_s8:
17497case ARM::BI__builtin_arm_mve_vrev32q_x_u8:
17498case ARM::BI__builtin_arm_mve_vrev64q_x_s8:
17499case ARM::BI__builtin_arm_mve_vrev64q_x_u8: {
17500 uint32_t Param0;
17501 switch (BuiltinID) {
17502 case ARM::BI__builtin_arm_mve_vrev16q_x_s8:
17503 Param0 = 16;
17504 break;
17505 case ARM::BI__builtin_arm_mve_vrev16q_x_u8:
17506 Param0 = 16;
17507 break;
17508 case ARM::BI__builtin_arm_mve_vrev32q_x_s8:
17509 Param0 = 32;
17510 break;
17511 case ARM::BI__builtin_arm_mve_vrev32q_x_u8:
17512 Param0 = 32;
17513 break;
17514 case ARM::BI__builtin_arm_mve_vrev64q_x_s8:
17515 Param0 = 64;
17516 break;
17517 case ARM::BI__builtin_arm_mve_vrev64q_x_u8:
17518 Param0 = 64;
17519 break;
17520 }
17521 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17522 Value *Val1 = UndefValue::get(Val0);
17523 Value *Val2 = EmitScalarExpr(E->getArg(0));
17524 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param0);
17525 Value *Val4 = EmitScalarExpr(E->getArg(1));
17526 Value *Val5 = Builder.CreateIntCast(Val4, Int32Ty, false);
17527 Value *Val6 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val5});
17528 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vrev_predicated, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val6, Val1});
17529}
17530case ARM::BI__builtin_arm_mve_vandq_x_s8:
17531case ARM::BI__builtin_arm_mve_vandq_x_u8:
17532case ARM::BI__builtin_arm_mve_vbicq_x_s8:
17533case ARM::BI__builtin_arm_mve_vbicq_x_u8:
17534case ARM::BI__builtin_arm_mve_veorq_x_s8:
17535case ARM::BI__builtin_arm_mve_veorq_x_u8:
17536case ARM::BI__builtin_arm_mve_vornq_x_s8:
17537case ARM::BI__builtin_arm_mve_vornq_x_u8:
17538case ARM::BI__builtin_arm_mve_vorrq_x_s8:
17539case ARM::BI__builtin_arm_mve_vorrq_x_u8: {
17540 Intrinsic::ID Param0;
17541 switch (BuiltinID) {
17542 case ARM::BI__builtin_arm_mve_vandq_x_s8:
17543 Param0 = Intrinsic::arm_mve_and_predicated;
17544 break;
17545 case ARM::BI__builtin_arm_mve_vandq_x_u8:
17546 Param0 = Intrinsic::arm_mve_and_predicated;
17547 break;
17548 case ARM::BI__builtin_arm_mve_vbicq_x_s8:
17549 Param0 = Intrinsic::arm_mve_bic_predicated;
17550 break;
17551 case ARM::BI__builtin_arm_mve_vbicq_x_u8:
17552 Param0 = Intrinsic::arm_mve_bic_predicated;
17553 break;
17554 case ARM::BI__builtin_arm_mve_veorq_x_s8:
17555 Param0 = Intrinsic::arm_mve_eor_predicated;
17556 break;
17557 case ARM::BI__builtin_arm_mve_veorq_x_u8:
17558 Param0 = Intrinsic::arm_mve_eor_predicated;
17559 break;
17560 case ARM::BI__builtin_arm_mve_vornq_x_s8:
17561 Param0 = Intrinsic::arm_mve_orn_predicated;
17562 break;
17563 case ARM::BI__builtin_arm_mve_vornq_x_u8:
17564 Param0 = Intrinsic::arm_mve_orn_predicated;
17565 break;
17566 case ARM::BI__builtin_arm_mve_vorrq_x_s8:
17567 Param0 = Intrinsic::arm_mve_orr_predicated;
17568 break;
17569 case ARM::BI__builtin_arm_mve_vorrq_x_u8:
17570 Param0 = Intrinsic::arm_mve_orr_predicated;
17571 break;
17572 }
17573 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17574 Value *Val1 = UndefValue::get(Val0);
17575 Value *Val2 = EmitScalarExpr(E->getArg(0));
17576 llvm::Type *Val3 = llvm::FixedVectorType::get(Int8Ty, 16);
17577 Value *Val4 = Builder.CreateBitCast(Val2, Val3);
17578 Value *Val5 = EmitScalarExpr(E->getArg(1));
17579 llvm::Type *Val6 = llvm::FixedVectorType::get(Int8Ty, 16);
17580 Value *Val7 = Builder.CreateBitCast(Val5, Val6);
17581 Value *Val8 = EmitScalarExpr(E->getArg(2));
17582 Value *Val9 = Builder.CreateIntCast(Val8, Int32Ty, false);
17583 Value *Val10 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val9});
17584 llvm::Type *Val11 = llvm::FixedVectorType::get(Int8Ty, 16);
17585 Value *Val12 = Builder.CreateBitCast(Val1, Val11);
17586 Value *Val13 = Builder.CreateCall(CGM.getIntrinsic(Param0, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val4, Val7, Val10, Val12});
17587 llvm::Type *Val14 = llvm::FixedVectorType::get(Int8Ty, 16);
17588 return Builder.CreateBitCast(Val13, Val14);
17589}
17590case ARM::BI__builtin_arm_mve_vdupq_x_n_s8:
17591case ARM::BI__builtin_arm_mve_vdupq_x_n_u8: {
17592 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17593 Value *Val1 = UndefValue::get(Val0);
17594 Value *Val2 = EmitScalarExpr(E->getArg(1));
17595 Value *Val3 = Builder.CreateIntCast(Val2, Int32Ty, false);
17596 Value *Val4 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val3});
17597 Value *Val5 = EmitScalarExpr(E->getArg(0));
17598 Value *Val6 = ARMMVEVectorSplat(Builder, Val5);
17599 return Builder.CreateSelect(Val4, Val6, Val1);
17600}
17601case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s8:
17602case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u8:
17603case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s8:
17604case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u8:
17605case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s8:
17606case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s8: {
17607 uint32_t Param0;
17608 uint32_t Param1;
17609 switch (BuiltinID) {
17610 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_s8:
17611 Param0 = 1;
17612 Param1 = 1;
17613 break;
17614 case ARM::BI__builtin_arm_mve_vcaddq_rot270_x_u8:
17615 Param0 = 1;
17616 Param1 = 1;
17617 break;
17618 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_s8:
17619 Param0 = 1;
17620 Param1 = 0;
17621 break;
17622 case ARM::BI__builtin_arm_mve_vcaddq_rot90_x_u8:
17623 Param0 = 1;
17624 Param1 = 0;
17625 break;
17626 case ARM::BI__builtin_arm_mve_vhcaddq_rot270_x_s8:
17627 Param0 = 0;
17628 Param1 = 1;
17629 break;
17630 case ARM::BI__builtin_arm_mve_vhcaddq_rot90_x_s8:
17631 Param0 = 0;
17632 Param1 = 0;
17633 break;
17634 }
17635 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17636 Value *Val1 = UndefValue::get(Val0);
17637 Value *Val2 = llvm::ConstantInt::get(Int32Ty, Param0);
17638 Value *Val3 = llvm::ConstantInt::get(Int32Ty, Param1);
17639 Value *Val4 = EmitScalarExpr(E->getArg(0));
17640 Value *Val5 = EmitScalarExpr(E->getArg(1));
17641 Value *Val6 = EmitScalarExpr(E->getArg(2));
17642 Value *Val7 = Builder.CreateIntCast(Val6, Int32Ty, false);
17643 Value *Val8 = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_pred_i2v, {llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val7});
17644 return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::arm_mve_vcaddq_predicated, {llvm::FixedVectorType::get(Int8Ty, 16), llvm::FixedVectorType::get(Builder.getInt1Ty(), 16)}), {Val2, Val3, Val1, Val4, Val5, Val8});
17645}
17646case ARM::BI__builtin_arm_mve_vnegq_s8: {
17647 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17648 Value *Val1 = llvm::Constant::getNullValue(Val0);
17649 Value *Val2 = EmitScalarExpr(E->getArg(0));
17650 return Builder.CreateSub(Val1, Val2);
17651}
17652case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_s8:
17653case ARM::BI__builtin_arm_mve_vuninitializedq_polymorphic_u8:
17654case ARM::BI__builtin_arm_mve_vuninitializedq_s8:
17655case ARM::BI__builtin_arm_mve_vuninitializedq_u8: {
17656 llvm::Type *Val0 = llvm::FixedVectorType::get(Int8Ty, 16);
17657 return UndefValue::get(Val0);
17658}
17659